Q:Promise Chaining and Rejection:reject 不会杀死链吗?
Q: Promise Chaining and Rejection: Doesn't reject kill the chain?
我有以下所有使用 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 也被调用了?这让我很困惑。我以为链中只有第一个错误处理程序被命中了?
有人可以解释一下发生了什么吗?如果我有办法在只调用最直接的 reject/error 处理程序的情况下获得所需的行为?
那要看什么on403
returns。如果没有,则假定它是一个解决方案 - 这解释了您所看到的行为。请记住,onReject
等同于 catch
,作为一个概念, 允许您继续处理,就好像没有发生错误一样
如果您想继续沿着拒绝链进行下去,那么您必须 return Promise.reject()
。否则你必须重新考虑你的承诺链。
我有以下所有使用 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 也被调用了?这让我很困惑。我以为链中只有第一个错误处理程序被命中了?
有人可以解释一下发生了什么吗?如果我有办法在只调用最直接的 reject/error 处理程序的情况下获得所需的行为?
那要看什么on403
returns。如果没有,则假定它是一个解决方案 - 这解释了您所看到的行为。请记住,onReject
等同于 catch
,作为一个概念, 允许您继续处理,就好像没有发生错误一样
如果您想继续沿着拒绝链进行下去,那么您必须 return Promise.reject()
。否则你必须重新考虑你的承诺链。