繁体   English   中英

Async.map如何实现? 结合使用Array.map和异步回调

[英]How is Async.map implemented? Use of Array.map with asynchronous callbacks

当在回调函数中使用异步函数时,对Array.map进行控制的最佳方法是什么?

我不想使用async.js库,仅使用普通JS。 所以我想知道如何实现我的Async.map方法。

让我们使用这个例子:

function async(arg, callback) {
  var delay=Math.random()*3*1000; // 0- 3000 delay
  console.log('do something with \''+arg+'\', return '+delay/1000+' sec later');
  setTimeout(function() { callback(arg * 2); }, delay);
}


var items = [ 1, 2, 3, 4, 5, 6 ];
var results = [];

results=items.map(function(item) {
  async(item, function(item){
    console.log("Done something, result: "+item);
  })
});

console.log("**This should be my last operation**");

我的脚本的输出如下所示:

do something with '1', return 0.9073115468490869 sec later
...
do something with '6', return 2.3373042417224497 sec later
**This should be my last operation***
Done something, result: 10
...
Done something, result: 8

但是我想要这个:

do something with '1', return 0.9073115468490869 sec later
...
do something with '6', return 2.3373042417224497 sec later
Done something, result: 10
...
Done something, result: 8
**This should be my last operation**

您不能将map与异步操作一起使用。 Array.map是一个同步操作,因此它将执行内部的功能,而不会等待异步操作。 这就是为什么您会看到这样的日志。

如果需要其他功能,可以使用Async。 或者,您可以使用async-each之类的库(仅35行代码) https://www.npmjs.com/package/async-each

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM