假设我正在构建注册流程,我的内容看起来像这样:
Q.nfcall(validateNewRegCallback, email, password)
.fail(function(err){
console.log("bad email/pass: " + err);
return null;
})
.then(function(){
console.log("Validated!");
})
.done();
如果我的注册失败,我想抓住它,然后死掉。相反,我看到“坏电子邮件/通过”和“验证”。为什么会这样,我怎么能在第一次失败的呼叫中中止?
答案 0 :(得分:4)
fail
处理程序确实捕获了被拒绝的承诺,但确实返回了已履行的承诺(在您的情况下为null
),因为已经处理了错误...
那么你能对此做些什么呢?
重新抛出错误以拒绝返回的promise。它会导致done
抛出它。
Q.nfcall(validateNewRegCallback, email, password).fail(function(err){
console.log("bad email/pass: " + err);
throw err;
}).then(function(){
console.log("Validated!");
}).done();
成功回调后处理错误(也处理成功回调中的错误):
Q.nfcall(validateNewRegCallback, email, password).then(function(){
console.log("Validated!");
}).fail(function(err){
console.log("bad email/pass: " + err);
}).done();
只需处理同一承诺的两种情况 - 每种方法都接受两次回调:
Q.nfcall(validateNewRegCallback, email, password).done(function(){
console.log("Validated!");
}, function(err){
console.log("bad email/pass: " + err);
};
当然,您也可以使用.then(…, …).done()
。