【问题标题】:Where to define callback for async.series in node.js在 node.js 中为 async.series 定义回调的位置
【发布时间】:2015-05-16 23:26:00
【问题描述】:

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

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 回调方法在异步任务完成后不会被调用。

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

【问题讨论】:

    标签: javascript node.js asynchronous callback


    【解决方案1】:

    那是因为您为 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);
        });
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-13
      • 1970-01-01
      • 2012-06-02
      • 2014-11-11
      • 2015-05-22
      • 1970-01-01
      相关资源
      最近更新 更多