如何在 Node.JS 中中止失败的 Q 承诺



假设我正在构建一个注册流程,我有如下所示的内容:

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

相关内容

  • 没有找到相关文章

最新更新