在没有静态时间的情况下等待所有回调完成执行
Waiting on all CallBacks to finish executing without a static time
我最近一直在开发一个快速应用程序,我一直在使用 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
在那之后项目数组总是空的 return,我感觉这可能是由于正常的 NodeJS 异步导致的竞争条件。
我需要遍历区域数组中的所有项目并从那个昂贵的函数中获取数据,然后才能 return。
有什么建议吗?
你可以把 expensive_function
变成一个 promise 返回函数,然后使用 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
我最近一直在开发一个快速应用程序,我一直在使用 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
在那之后项目数组总是空的 return,我感觉这可能是由于正常的 NodeJS 异步导致的竞争条件。
我需要遍历区域数组中的所有项目并从那个昂贵的函数中获取数据,然后才能 return。
有什么建议吗?
你可以把 expensive_function
变成一个 promise 返回函数,然后使用 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