我具有以下链接的函数,所有这些函数都使用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也被调用了吗?这使我感到困惑。我以为只有第一个错误处理程序被击中了?
有人可以解释发生了什么吗?是否有办法让我得到只调用最直接的拒绝/错误处理程序的期望行为?
答案 0 :(得分:1)
这取决于on403
返回什么。如果没有任何响应,则假定它是一种解决方案-可以解释您所看到的行为。请记住,onReject
等效于catch
,从概念上讲,允许您继续处理,好像没有发生错误一样
如果您想继续沿拒绝链前进,则必须return Promise.reject()
。否则,您必须重新考虑您的诺言链。