返回课程

Promise: then 与 catch

这些代码片段是否相等?换句话说,它们在任何情况下,对于任何处理函数,行为是否相同?

promise.then(f1).catch(f2);

对比

promise.then(f1, f2);

简短的回答是:否,它们不相等

区别在于,如果 f1 中发生错误,那么它将由这里的 .catch 处理

promise
  .then(f1)
  .catch(f2);

…但这里不会

promise
  .then(f1, f2);

这是因为错误会向下传递,而在第二个代码片段中,f1 下面没有链。

换句话说,.then 将结果/错误传递给下一个 .then/catch。因此,在第一个示例中,下面有一个 catch,而在第二个示例中没有,因此错误未处理。