我最近一直在使用快速应用程序,而且我一直在使用CoffeeScript使JS更具可忍性。我有一个类似于以下的结构:
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数组总是空出来,由于正常的NodeJS异步,我感觉可能是竞争条件。
我需要遍历regions数组中的所有项目,并在返回之前从该昂贵的函数中获取数据。
有什么建议吗?
答案 0 :(得分:1)
您可以将expensive_function
转换为承诺返回函数,并使用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