NodeJS异步 - 像for-cycle一样使用它

时间:2018-02-04 19:14:09

标签: javascript node.js for-loop asynchronous

如何使用NodeJS Async(https://caolan.github.io/async/)作为正常for-cycle?

for(var i = 0; i < 100; i++){
  doSomething();
}

我需要串行流但是正常的for-cycle不等到动作结束。

我对ES6解决方案持开放态度,如果有的话。

3 个答案:

答案 0 :(得分:1)

我相信你总能做到这样的事情:

function asyncWhile(condition, action, ctx) {
  const whilst = function(data) {
    return condition.call(ctx, data) ?
      Promise.resolve(action.call(ctx, data)).then(whilst) :
      data;
  }
  return whilst();
}

let i = 1
asyncWhile(
() => {
  if (i <= 100) {
    i += 1
    return true
  }
  return false
},
() => {
  console.log(`iteration ${i}`)
},
)

答案 1 :(得分:1)

您可以尝试使用ES6中的Async/Await,它在许多标准中都是更清晰和常见的共享。此外,您不需要第三方的任何依赖

$ bash datefind.sh
find: Can't parse date/time: 1483743420
1484348640
1484953920
1485559200
1486164480
1486769820

答案 2 :(得分:0)

我发现了使用until中的async函数的另一种方式:

var i = 0;
var max = 100;
async.until(() => {
    i++;
    return i === max-1;
}, function (callback) {
    //doMagic()
    callback();
}, function () {
    console.log("Finished");
});