javascript 中的异步 foreach,步长为 n

Async foreach in javascript with step of n

如果我 运行 这个,我会在我的控制台中得到 1, 2, ..., 50。

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

但我想要步长为 3。我想得到:1, 4, 7, ... 像这样的循环:

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

}

如何使用异步实现此目的?

我不确定 async.forEach 是什么,但假设您只是想像您所说的那样通过 3 个步骤进行正常的 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

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();
}