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