所以在Node.js中假设我有以下代码:
for (var i = 0; i < 1000; i++) {
someAsynchronousFunction(function(err,res) {
// Do a bunch of stuff
callback(null,res);
});
}
但我想让它同步运行。我知道在Node JS中不建议这样做,但我只是想了解这种语言。我尝试实现以下解决方案,但它最终会在运行时挂起:
for (var i = 0; i < 1000; i++) {
var going = true;
someAsynchronousFunction(function(err,res) {
// Do a bunch of stuff
callback(null,res);
going = false;
});
while (going) {
}
}
出了什么问题以及这样做的正确方法是什么?
答案 0 :(得分:1)
最好的方法之一是使用 async 库。
async.timesSeries(1000, function(n, next){
someAsynchronousFunction(next);
});
或者你可以使用async.series() function。
.times()文档: http://caolan.github.io/async/docs.html#.timesSeries
答案 1 :(得分:1)
另一种方法是使用Promises通过Array#reduce
生成顺序执行它们:
// Function that returns Promise that is fllfiled after a second.
function asyncFunc (x){
return new Promise((rs, rj)=>{
setTimeout( ()=>{
console.log('Hello ', x);
rs();
}, 1000)
});
}
// Generate an array filed with values : [0, 1, 2, 3, ...]
Array.from({length : 1000}, (el, i)=> i)
// loop througth the array chaining the promises.
.reduce( (promise, value) =>
promise.then(asyncFunc.bind(null, value))
, Promise.resolve(null));