繁体   English   中英

异步系列的回调不会触发

[英]Async series's callback doesn't fire

我的问题是,当我使用此代码时,我总是在ensureAppIsValid获得回调,并且Async系列中的回调似乎从未触发过

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

异步系列要求将一系列功能作为要运行的任务。

你过关了

this.ensureAppIsValid(callback)

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

尝试这个:

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

看来您使用“回调”一词的次数太多了,并且代码没有达到您期望的效果。 您要将顶级回调传递给sureAppIsValid()函数,因此一旦该函数执行,就不会进入异步回调。 看起来您在异步的后续操作中不需要多余的回调。

这个怎么样:

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

您不应将参数callbackthis.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最终的回调。 现在,它更加紧凑。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM