Есть ли элегантный способ асинхронного отображения объекта или массива в coffeescript? (. Или Javascript)асинхронная карта в coffeescript
Представьте У меня есть некоторые вещи в объекте:
things =
x:
...
y:
...
z:
...
thingCount = 3
Я хочу, чтобы создать метод, который будет обрабатывать каждый из этих вещей и вернуть обработанный объект. Процесс должен сделать асинхронный вызов для получения некоторой информации о каждой вещи. Сначала я попытался просто перебрать свойства следующим образом:
processThings = (callback) ->
processedThings = {}
count = 0
for key,val in things
asyncJob key,val (err,result) ->
if err
callback error
else
# PROBLEM: key has the incorrect value here
processedThings[key] = result
count += 1
if count == thingCount
callback null,processedThings
Проблема заключается в том, что значение ключевых изменений в цикле. Таким образом, мое решение, чтобы создать вложенную функцию так, что ключевой переменной содержится в его закрытия:
processThings = (callback) ->
processedThings = {}
count = 0
processThing = (key,val) ->
asyncJob key,val (err,result) ->
if err
callback error
else
processedThings[key] = result
count += 1
if count == thingCount
callback null,processedThings
processThing key,val for key,val of things
Но мальчик здор`ово что уверен, Fugly. Есть ли предпочтительный шаблон для этого?
использовать [утилиту карты] (https://github.com/Raynos/after.js/blob/master/src /after.js#L64) – Raynos
«после» выглядит как хорошая библиотека Raynos - спасибо! – mainsocial