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

Javascript 如何在Node.JS中中止失败的Q承诺,javascript,node.js,promise,q,Javascript,Node.js,Promise,Q,假设我正在建立一个注册流程,我有一个类似这样的东西: Q.nfcall(validateNewRegCallback, email, password) .fail(function(err){ console.log("bad email/pass: " + err); return null; }) .then(function(){ console.log("Validated!"); }) .done

假设我正在建立一个注册流程,我有一个类似这样的东西:

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

如果我的注册失败,我想抓住它,然后死去。相反,我看到的是“坏邮件/通过”和“已验证”。为什么会这样?我如何在第一次失败调用中中止?

处理程序会捕获被拒绝的承诺,但会返回一个已实现的承诺(在您的情况下为
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).done(function(){
        console.log("Validated!");
    }, function(err){
        console.log("bad email/pass: " + err);
    };
    
    当然,您也可以使用
    。然后(…,…).done()


处理程序会捕获被拒绝的承诺,但会返回已履行的承诺(在您的情况下为
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).done(function(){
        console.log("Validated!");
    }, function(err){
        console.log("bad email/pass: " + err);
    };
    
    当然,您也可以使用
    。然后(…,…).done()

使用
promise.catch(onRehected)
方法。使用
promise.catch(onRehected)
方法。