async.waterfall:这个瀑布方法一个一个地运行所有函数(即任务),并将第一个函数的结果传递给第二个函数,第二个函数的结果传递给第三个函数,依此类推。当一个函数将错误传递给它自己的回调函数时,则不会执行下一个函数。因此,主回调会立即被错误调用。
句法:
waterfall(tasks,callback)
- 任务:它指的是异步函数数组。每个函数都会运行并将结果作为参数发送给下一个函数。
- callback:一旦所有功能都完成,则回调运行。这将具有来自最后一个任务回调结果的参数。回调是可选的。它是用 (err,[results]) 调用的。
注意:要使用 async.waterfall函数,我们需要先导入它。
javascript
import waterfall from 'async/waterfall';
javascript
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'
});
javascript
import series from 'async/series';
javascript
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.*/
});
例子:
javascript
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'
});
Outout: async.waterfall()将仅将最后一个调用的函数的结果传递给主回调。
complete
async.series: async.series 方法串行运行任务集合中的函数。前一个函数完成后,每个函数都会运行。如果系列中的任何函数向其回调传递错误,则不再执行更多函数。然后,立即使用错误值调用回调。否则,当任务完成时,回调会收到所有任务的结果数组。
句法:
series(tasks,callback)
- 任务:它是一系列任务或功能的集合。
- callback:可选参数,当任一函数发生错误时调用,否则获取所有任务的结果数组。
注意:要使用 async.series函数,我们需要先导入它。
javascript
import series from 'async/series';
例子:
javascript
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 会将所有任务的结果传递给主回调。