[英]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'
});
});
};
您不应将参数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
最终的回调。 现在,它更加紧凑。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.