在没有静态时间的情况下等待所有回调完成执行

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