Javascript 等待所有回调在没有静态时间的情况下完成执行
我最近一直在开发一个express应用程序,我一直在使用CoffeeScript使JS更容易接受。我的结构与以下类似:Javascript 等待所有回调在没有静态时间的情况下完成执行,javascript,node.js,asynchronous,coffeescript,Javascript,Node.js,Asynchronous,Coffeescript,我最近一直在开发一个express应用程序,我一直在使用CoffeeScript使JS更容易接受。我的结构与以下类似: items = [] for region in regions expensive_function {}, (err, data) -> # operations on data/error handling items.push({k: data['v'][a]['l']}) # transforming informatio
items = []
for region in regions
expensive_function {}, (err, data) ->
# operations on data/error handling
items.push({k: data['v'][a]['l']}) # transforming information from data
return items
返回之后,items数组总是空的,我有一种感觉,这可能是由于正常的nodejsasync造成的竞争条件
在返回之前,我需要检查区域数组中的所有项目,并从昂贵的函数中获取数据
有什么建议吗?您可以将昂贵的函数转换为承诺返回函数,并使用async/await:
expensive_function_promise = (obj) ->
return new Promise (resolve, reject) ->
expensive_function obj, (err, data) ->
reject(err) if err?
resolve data
create_items = (regions) ->
items = []
for region in regions
data = await expensive_function_promise {}
items.push { k: data.v[a].l }
items
create_items regions
.then (items) ->
do_something_with items
.catch (err) ->
handle_error err
完美的非常感谢。