2014-02-17 39 views
0

比方說,我要建一個註冊流程,和我有一些看起來像這樣:如何中止一個失敗的Q承諾在Node.js的

Q.nfcall(validateNewRegCallback, email, password) 
    .fail(function(err){ 
     console.log("bad email/pass: " + err); 
     return null; 
    }) 
    .then(function(){ 
     console.log("Validated!"); 
    }) 
    .done(); 

如果我註冊失敗,我想抓住它,死亡。相反,我看到「不合格的電子郵件/通行證」和「經過驗證」。爲什麼是這樣的,我怎樣才能在第一次失敗呼叫中中止?

+0

使用'promise.catch(onRehected)'方法。 – Roman

回答

4

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()