我刚刚使用了异步瀑布方法,但我对于接着调用该函数感到困惑。我想控制'hi',但它没有被调用。有人可以建议帮忙吗?
exports.inviteAgent = function (req, res) {
var obj = {};
async.waterfall([
function (done) {
var url = config.mailer.inviteAgentUrl;
res.render('modules/users/server/templates/invite-agent', {
name: obj.name,
}, function (err, emailHTML) {
done(err, emailHTML);
});
},
// If valid email, send reset email using service
function (emailHTML, done) {
var mailOptions = {
to: obj.email,
from: config.mailer.from,
subject: 'Invite agent',
html: emailHTML
};
smtpTransport.sendMail(mailOptions, function (err) {
if (err) {
return res.send({ 'respCode': common.statusCodes.COMMON, 'respMessage': errorHandler.getErrorMessage(err) });
} else {
res.jsonp({ 'respCode': common.statusCodes.SUCCESS, 'respMessage': 'Send email successfully' });
done(done);
}
});
},
function (done) {
console.log('hi')
}
], function (err) {
});
};
答案 0 :(得分:0)
我认为在这种情况下你没有正确处理回调或完成函数。试试这个
<input class="form-control" placeholder="yyyy-mm-dd" ngbDatepicker
name="dp-start" [(ngModel)]="startDate"
#dpStart="ngbDatepicker" id="dp-start">
答案 1 :(得分:0)
您需要对变量名称更加小心。我已经重构了您的代码,以区分您对“已完成”这个名称的使用。
exports.inviteAgent = function (req, res) {
var obj = {};
async.waterfall([
function (callback1) {
var url = config.mailer.inviteAgentUrl;
res.render('modules/users/server/templates/invite-agent', {name: obj.name,}, function (err, emailHTML) {
callback1(err, emailHTML);
});
},
// If valid email, send reset email using service
function (emailHTML, callback2) {
var mailOptions = {};
smtpTransport.sendMail(mailOptions, function (err) {
if (err) {
return res.send({ 'respCode': common.statusCodes.COMMON, 'respMessage': errorHandler.getErrorMessage(err) });
} else {
res.jsonp({ 'respCode': common.statusCodes.SUCCESS, 'respMessage': 'Send email successfully' });
callback2(callback2); // <== ERROR HERE
}
});
},
function (callback3) {
console.log('hi')
}
], function (err) {});
};
你自己调用callback2函数。此参数值不为null,这意味着回调错误参数不为null。这会导致瀑布流产并立即调用瀑布函数的错误部分。
答案 2 :(得分:0)
当您从瀑布的内部函数返回回调done()时,如果有错误则必须调用done(错误)。如果没有错误的调用(null,data)数据包含争论发送到下一个函数。因为第一个参数在done()中是错误的,如果它是null,那么它转到下一个函数,否则它会停止执行瀑布。