簡體   English   中英

如何在Node.JS中終止失敗的Q承諾

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM