问题描述
在使用async.parallel项目的过程中发现了个问题。例如,我同时异步执行100个任务,在这些任务都结束后,再对所有结果进行操作。现在的问题是,如果按下面这种写法,那我是要写100个雷同的方法了,我想是不是可以用个for循环来让这些方法同时运行呢?但是我试过会报错,各位大神能支个招吗?
var async = require(’async’);function test() { async.parallel([function (callback) { setTimeout(function () {callback(null, 1); }, 100);},function (callback) { setTimeout(function () {callback(null, 2); }, 100);},function (callback) { setTimeout(function () {callback(null, 3); }, 100);},// 如果这后面面还有一样的97个方法...... ], function (err, results) {var rlt = results[0] + ’|’ + results[1] + ’|’ + results[2] + ......;console.log(rlt) });}test();
问题解答
回答1:自己做出来了
function test() { var arr = []; for (var i = 0; i < 100; i++) {arr[i] = function (num) { return function (callback) {callback(null, num); }} (i) } return arr;}var arr = test();async.parallel(arr, function (err, results) { console.log(results);});回答2:
先在外面for循环构造个数组,由一百个函数组成,再传进去。
回答3:Promise.coroutine(function *() { const results = yield Promise.all([Promise.resolve(1),Promise.resolve(2) ]) console.log(’array’, results[0], results[1]) const [a, b] = yield Promise.all([Promise.resolve(1),Promise.resolve(2) ]) console.log(’destructured’, a, b)})()
参考文档
深入理解javascript异步模式bluebirdjs