如何在node.js中的map迭代器中正确执行异步I / O?

时间:2012-10-21 11:12:19

标签: node.js asynchronous map

  

可能重复:
  Cannot use “map” function within async module

我遇到了这样的问题:

    var paths = ['path1', 'path2', 'path3', ...]; //Some arbitrary array of paths

    var results; //I need to collect an array of results collected from these paths

results = paths.map(function(path){
  var tempResult;

  GetData(path, function(data){ //Third-party async I/O function which reads data from path
    tempResult = data;
  });

  return tempResult;
});

console.log(results); //returns something like [nothing, nothing, nothing, ...]

我可以想象为什么会发生这种情况(return tempResult在异步函数返回任何数据之前触发 - 毕竟它很慢),但是不能完全看清楚如何使其正确。

我的猜测async.map可能有所帮助,但我没有立即看到它。

也许在异步编程方面更有经验的人可以解释一下这种方式?

1 个答案:

答案 0 :(得分:2)

您可以尝试以下方式:

async.map(paths,function(path,callback){
    GetData(path,function(data){ callback(null,data); });
},function(error,results){
    if(error){ console.log('Error!'); return; }
    console.log(results);
    // do stuff with results
});

如您所见,您需要将处理结果的代码转移到要传递到async.map的函数中。