问:承诺连锁和拒绝:不拒绝杀死连锁吗?

时间:2019-01-23 16:56:07

标签: javascript node.js promise q

我具有以下链接的函数,所有这些函数都使用Q来实现承诺:

validateToken(context).then(parseFormData, get403).then(createReport, get400).then(send200, get400).catch(get500);

例如他们所有人都在其中某处:

let deferred = q.defer();
..
deferred.resolve(true);
deferred.reject(false);
return deferred.promise;

第一个函数validateToken调用deferred.reject。然后,这将导致get403被调用,正如预期的那样;但是createReport,get400和get500也被调用了吗?这使我感到困惑。我以为只有第一个错误处理程序被击中了?

有人可以解释发生了什么吗?是否有办法让我得到只调用最直接的拒绝/错误处理程序的期望行为?

1 个答案:

答案 0 :(得分:1)

这取决于on403返回什么。如果没有任何响应,则假定它是一种解决方案-可以解释您所看到的行为。请记住,onReject等效于catch,从概念上讲,允许您继续处理,好像没有发生错误一样

如果您想继续沿拒绝链前进,则必须return Promise.reject()。否则,您必须重新考虑您的诺言链。