Async系列的回调并不会触发

时间:2015-05-23 13:07:11

标签: javascript node.js asynchronous

我的问题是,当我使用此代码时,我总是在ensureAppIsValid中获得回调,并且异步系列中的那个似乎永远不会被解雇

var ReviewProcess = function (args) {
    'use strict';
    assert(args.application, 'Need an application to review');
    this.app = args.application;
};

ReviewProcess.prototype.ensureAppIsValid = function (callback) {
    'use strict';
    if (this.app.isValid()) {
        callback(null, this.app);
    } else {
        callback(this.app.validationMessage(), null);
    }
};

ReviewProcess.prototype.processApplication = function (callback) {
    'use strict';
    async.series([
        this.ensureAppIsValid(callback)
    ], function (err, callback) {
        if (err) {
            return callback(null, {
                success: false,
                message: err
            });
        }
        callback(null, {
            success: true,
            message: 'Welcome to Mars'
        });
    });
};

3 个答案:

答案 0 :(得分:0)

异步系列需要一系列函数作为要运行的任务。

你传递

config

但这是函数的调用,而不是函数本身。

试试这个:

git add/commit --interactive

答案 1 :(得分:0)

您似乎正在使用'回调'太多次,代码没有做你期望的事情。您正在将顶级回调传递给ensureAppIsValid()函数,因此一旦该函数执行,它就不会进入异步回调。看起来你也不需要在异步的跟进中进行额外的回调。

这个怎么样:

ReviewProcess.prototype.processApplication = function (callback) {
    'use strict';
    async.series([
        this.ensureAppIsValid(cb)
    ], function (err) {
        if (err) {
            return callback(null, {
                success: false,
                message: err
            });
        }
        callback(null, {
            success: true,
            message: 'Welcome to Mars'
        });
    });
};

答案 2 :(得分:0)

您不应将参数callback传递给this.ensureAppIsValid()。相反,在这里使用本地回调参数。例如,名为cb

尝试:

var ReviewProcess = function (args) {
    'use strict';
    assert(args.application, 'Need an application to review');
    this.app = args.application;
};

ReviewProcess.prototype.ensureAppIsValid = function (callback) {
    'use strict';
    if (this.app.isValid()) {
        callback(null, this.app);
    } else {
        callback(this.app.validationMessage(), null);
    }
};

ReviewProcess.prototype.processApplication = function (callback) {
    'use strict';
    async.series([
        this.ensureAppIsValid(cb)
    ], function (err, callback) {
        callback(null, {
            success: !err,
            message: err? err : 'Welcome to Mars'
        });
      }
    });
};

我也稍微改变了async.series中的最终回调。现在它更加紧凑。