0

可能重复:
不能在异步模块中使用“map”函数

我有这样的问题:

    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可能会有所帮助,但我无法立即看到。

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

4

1 回答 1

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.

于 2012-10-21T12:46:09.287 回答