我的问题是 - async.forEachLimit 函数不会将迭代限制n次。
我为我的收藏执行异步任务。我试过这个......
var async = require('async');
console.log(finalLocations.length); //Expecting 4
所以我需要执行循环3次,因为我在键中使用当前值,在同一操作中使用键的下一个值。它将导致最后一次迭代的未定义。
因为我在迭代时间少了1次收集的时间。我用过这个。如果长度为4,我想迭代它3次,即0,1,2。这样 -
async.forEachOfLimit(finalLocations, finalLocations.length - 2, function (value, key, next) {
console.log(key + ': ' + value);
//distanceMatrix.matrix(finalLocations[key], finalLocations[key + 1], function (err, successiveDistances) {
// if (err) return next(err);
// if (!successiveDistances || successiveDistances.status !== 'OK') {
// return next({status: 400, message: 'No distance'});
// }
//
// if (successiveDistances.rows[0].elements[0].status === 'OK') {
// totalTime = totalTime + successiveDistances.rows[0].elements[0].duration.value;
// totalDistance = totalDistance + successiveDistances.rows[0].elements[0].distance.value;
// }
// next();
//});
next();
}, function (err) {
console.error('Printing error here :- ' + err);
if (err) return callback(err);
console.log('Successfully completed all iterations !!');
callback(null, {totalTime: 0, totalDistance: 0});
});
或者,如果简单,我可以发布。
async.forEachOfLimit([1,2,3,4], 2, function (value, key, next) {
console.log(key + ': ' + value);
next();
}, function (err) {
console.error('Printing error here :- ' + err);
if (err) return callback(err);
console.log('Successfully completed all iterations !!');
callback(null, {totalTime: 0, totalDistance: 0});
});
它的控制台是:
0: 1
1: 2
2: 3
3: 4
Printing error here :- null
Successfully completed all iterations !!
答案 0 :(得分:3)
async.forEachOfLimit()
迭代您传递的整个集合。第二个参数(限制值)仅指定同时在飞行中有多少次迭代。因此,如果你传递一个包含4个元素和3个限制的数组,它将启动前3个操作,然后当其中一个操作完成时,它将开始第4个操作。
这就是该功能被编码为工作的方式。
如果您只想迭代集合的一部分,您可以拼出集合的部分副本并将其传递给async.each()
。