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)
方法。