📜  async.waterfall 和 async.series 有什么区别?

📅  最后修改于: 2021-09-15 01:49:26             🧑  作者: Mango

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 会将所有任务的结果传递给主回调。