[英]How to abort a failing Q promise in Node.JS
假設我正在建立一個注冊流程,並且我看起來像這樣:
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()
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.