假设我正在构建一个注册流程,我有如下所示的内容:
Q.nfcall(validateNewRegCallback, email, password)
.fail(function(err){
console.log("bad email/pass: " + err);
return null;
})
.then(function(){
console.log("Validated!");
})
.done();
如果我的注册失败,我想抓住它,然后死去。 相反,我同时看到"错误的电子邮件/通行证"和"已验证"。 为什么会这样,如何在第一次失败调用中中止?
fail
处理程序确实捕获了被拒绝的承诺,但随后确实返回了一个已实现的承诺(在您的情况下为 null
),因为错误已经处理过......
那么,您能对此做些什么呢?
-
重新抛出错误以拒绝返回的承诺。它会导致
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()
。