使用n步在javascript中异步foreach

时间:2018-11-18 07:15:28

标签: javascript node.js for-loop foreach async.js

如果运行此命令,我的控制台中将显示1、2,...,50。

keys = [1, 2, 3, ..., 50];
async.forEach(keys, function (key, callback){
    console.log(key);
    callback();
}

但是我想走3步。我想得到:1,4,7,... 像这样的for循环:

for (let key = 1; key <= 50; key = key + 3) {

}

如何通过异步实现这一目标?

2 个答案:

答案 0 :(得分:2)

我不确定async.forEach是什么,但是假设您只是尝试按照您所说的三个步骤来进行正常的forEach,这是我的方法:

forEach并不真正适用于操作索引的用法(特别是在更难处理的情况下,索引可能会在循环中更改),但是作为一个快速技巧,您可以执行以下操作:

keys.forEach((key, index) => {
  if(index % 3 === 0) {
  // Only true when it's a multiple of 3
  // Do your loop body
  } 
});

请注意,forEach进行了回调,其中第一个参数是当前值,可选参数(在当前索引中)是可选参数,请参见docs

答案 1 :(得分:1)

const res = keys.reduce((acc, elem, i) => i % 3 == 0 ? [...acc, elem] : acc, []);

将为您提供以下结果的res

[1, 4, 7, 10, 13, ..., 48]; // Every 3rd index

i % 3用于控制步骤。因此,如果您想每次增加4,则可以将其更改为i % 4等...

因此,您可以像下面这样在代码中使用它:

keys = [1, 2, 3, ..., 50];
let stepKeys = keys.reduce((acc, elem, i) => i % 3 == 0 ? [...acc, elem] : acc, []);
async.forEach(stepKeys, function (key, callback){
    console.log(key);
    callback();
}