JavaScript async.waterfall 和 async.series 之间的区别是什么
async.waterfall: 此waterfall方法逐个运行所有的函数(即任务),并将第一个函数的结果传递给第二个函数,将第二个函数的结果传递给第三个函数,依此类推。当一个函数将错误传递给自己的回调函数时,后续的函数将不会被执行。所以,主要的回调函数会立即带有错误被调用。
语法:
waterfall(tasks,callback)
- tasks: 它指的是异步函数数组。每个函数运行并将结果作为参数发送给下一个函数。
- callback: 当所有函数都完成时,回调函数会运行。它将具有来自最后一个任务回调的结果作为参数。回调函数是可选的。它被调用时带有(err,[results])。
注意: 为了使用async.waterfall函数,我们需要先导入它。
import waterfall from 'async/waterfall';
示例:
async.waterfall([
function(callback) {
callback(null, 'gfg', 'one');
},
function(arg1, arg2, callback) {
// The arg1 now equals 'gfg'
// and arg2 now equals 'one'
callback(null, 'two');
},
function(arg1, callback) {
// The arg1 now equals 'two'
callback(null, 'complete');
}
], function (err, result) {
// Result now equals 'complete'
});
输出: async.waterfall()只会将最后一个调用的函数的结果传递给主回调函数。
complete
async.series: async.series方法按照顺序运行任务集合中的函数。每个函数在上一个函数完成后运行一次。如果任何一个函数在系列中将错误传递给其回调函数,那么不会再执行其他函数。然后,回调立即被调用并传递错误的值。否则,当任务完成时,回调会收到一个包含所有任务结果的数组。
语法:
series(tasks,callback)
- tasks: 它是一系列任务或函数的集合。
- callback: 它是一个可选参数,在任何函数发生错误时被调用,否则,它获取所有任务的结果数组。
注意: 要使用async.series函数,我们首先需要引入它。
import series from 'async/series';
示例:
async.series([
function(callback) {
// do something...
callback(null, 'one');
},
function(callback) {
// do something...
callback(null, 'two');
}
],
// callback(optional)
function(err, results) {
/* Results is now equal to
['one', 'two'] and this is
returned from all the tasks
executed above.*/
});
输出: 一旦系列结束, async.series() 将把所有任务的结果传递给主回调函数。
async.waterfall和async.series的主要区别是:
- async.waterfall允许每个函数将其结果传递给下一个函数,而async.series将所有任务的结果传递给最终回调函数。
- async.waterfall()只会将最后一个函数的结果传递给主回调函数。然而,async.series将把所有任务的结果传递给主回调函数。