Javascript 异步系列';s回调不';t火

Javascript 异步系列';s回调不';t火,javascript,node.js,asynchronous,Javascript,Node.js,Asynchronous,我这里的问题是,当我使用这段代码时,我总是在中得到有效的回调,而异步系列中的回调似乎从未被触发 var ReviewProcess = function (args) { 'use strict'; assert(args.application, 'Need an application to review'); this.app = args.application; }; ReviewProcess.prototype.ensureAppIsValid = fun

我这里的问题是,当我使用这段代码时,我总是在
中得到有效的回调,而异步系列中的回调似乎从未被触发

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'
        });
    });
};

Async series需要函数列表作为要运行的任务

你通过了吗

this.ensureAppIsValid(callback)
但这是函数的调用,而不是函数本身

试试这个:

Async.series([
        this.ensureAppIsValid.bind.apply(this.ensureAppIsValid, [null, [callback]])
    ], ... )

看起来您使用“回调”这个词的次数太多了,而代码并没有达到预期的效果。您正在将顶级回调传递给ensureAppIsValid()函数,因此一旦该函数执行,它就不会转到async的回调。在async的后续操作中,您似乎不需要额外的回调

这个怎么样:

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'
        });
    });
};

您不应该将参数
callback
传递给
this.confereparisvalid()
。而是在此处使用本地回调参数。例如,命名为
cb

尝试:

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

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'
        });
      }
    });
};