var async = require('async');
function callbackhandler(err, results) {
console.log('It came back with this ' + results);
}
function takes5Seconds(callback) {
console.log('Starting 5 second task');
setTimeout( function() {
console.log('Just finshed 5 seconds');
callback(null, 'five');
}, 5000);
}
function takes2Seconds(callback) {
console.log('Starting 2 second task');
setTimeout( function() {
console.log('Just finshed 2 seconds');
callback(null, 'two');
}, 2000);
}
async.series([takes2Seconds(callbackhandler),
takes5Seconds(callbackhandler)], function(err, results){
console.log('Result of the whole run is ' + results);
})
输出如下所示:
Starting 2 second task
Starting 5 second task
Just finshed 2 seconds
It came back with this two
Just finshed 5 seconds
It came back with this five
我期待takes2Second 函数在takes5Second 开始之前完全完成。 这就是它应该如何工作的方式。请告诉我。 最后的功能永远不会运行。谢谢。
最佳答案
不完全是。您正在立即执行这些函数(一旦对数组求值),这就是它们似乎同时开始的原因。
传递给每个要执行的函数的回调在异步库内部。一旦你的函数完成,你就执行它,传递一个错误和/或一个值。您不需要自己定义该函数。
最后一个函数永远不会在您的情况下运行,因为异步需要您调用以继续执行系列中的下一个函数的回调函数实际上从未被执行(只有您的 callbackHandler
函数被执行) .
试试这个:
async.series([
takes2Seconds,
takes5seconds
], function (err, results) {
// Here, results is an array of the value from each function
console.log(results); // outputs: ['two', 'five']
});
关于javascript - node.js async.series 是它应该如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15969082/