node.js - Async forEachOfLimit 函数不限制集合的迭代

标签 node.js asynchronous

我的问题是 - 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 !!

最佳答案

async.forEachOfLimit() 迭代您传递给它的整个集合。第二个参数(限制值)仅指定同时进行的迭代次数。因此,如果您向其传递一个包含 4 个元素且限制为 3 个元素的数组,它将开始前 3 个操作,然后当其中一个操作完成时,它将开始第四个操作。

这就是该函数的编码方式。

如果您只想迭代集合的一部分,则可以拼接集合的部分副本并将其传递给诸如 async.each() 之类的东西。

关于node.js - Async forEachOfLimit 函数不限制集合的迭代,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33604509/

相关文章:

node.js - 使用 async wait 执行多个数据库查询

javascript - 如何检查NodeJS程序是否即将存在

node.js - 带有明确错误 : Query. 的 GraphQL 示例字段类型必须是输出类型,但得到:[object Object]

node.js - 如何在非 Electron 网页上从Electron接收事件

javascript - Jsctags 不工作

javascript - 如何用后备选项替换字符串?

node.js - 使用证书、私钥和 CA 的 AWS Lambda NodeJS 请求

javascript - Nodejs - SolrClient,如何等待响应

c# - 同时触发重复执行的任务

c# - 用于优化的线程使用