Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/460.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/41.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 等待所有回调在没有静态时间的情况下完成执行_Javascript_Node.js_Asynchronous_Coffeescript - Fatal编程技术网

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

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

我最近一直在开发一个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 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

完美的非常感谢。