【问题标题】:How to abort a failing Q promise in Node.JS如何在 Node.JS 中中止失败的 Q 承诺
【发布时间】:2014-02-17 19:48:01
【问题描述】:

假设我正在构建一个注册流程,我有一些看起来像这样的东西:

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

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

【问题讨论】:

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

标签: javascript node.js promise q


【解决方案1】:

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();
    
  • 只需在同一个 promise 上处理这两种情况 - 每个方法都接受两个回调:

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

    当然你也可以使用.then(…, …).done()

【讨论】:

    猜你喜欢
    • 2013-06-28
    • 1970-01-01
    • 2015-04-15
    • 2015-04-08
    • 2015-07-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-15
    相关资源
    最近更新 更多