在 node.js 中为 async.series 定义回调的位置

Where to define callback for async.series in node.js

我想在异步任务完成时调用回调。以下是相同的代码:

var async = require("async");

function callMeWhenDone(err, result){
    if(err) console.log('Error Occurred');
    console.log('Callback called');
    console.dir(result);
}

function tasks() {
    console.log('Start executing tasks');
    var tasks = [];
    var result = {};

    tasks.push(function(callMeWhenDone) {
        console.log('Getting some data');
        callMeWhenDone(null, result);
    });
    tasks.push(function(callMeWhenDone) {
        console.log('Second function called');
        callMeWhenDone(null, result);
    });

    async.series(tasks, function(err, result){
        console.log('All done');
        callMeWhenDone(err, result);
    });
}

tasks();

在上面的代码中,callMeWhenDone回调方法在异步任务完成后没有被调用。

如何在异步任务中调用它。

那是因为您为 async 任务回调参数指定了与 callMeWhenDone 相同的名称。给该参数一个不同的名称,如 cb,然后在每个任务完成时调用它们:

function tasks() {
    console.log('Start executing tasks');
    var tasks = [];
    var result = {};

    tasks.push(function(cb) {
        console.log('Getting some data');
        callMeWhenDone(null, result);
        cb(null, result);

    });
    tasks.push(function(cb) {
        console.log('Second function called');
        callMeWhenDone(null, result);
        cb(null, result);
    });

    async.series(tasks, function(err, result){
        console.log('All done');
        callMeWhenDone(err, result);
    });
}