回到课程

Promise:then 对比 catch

这两个代码片段是否相等?换句话说,对于任何处理程序(handler),它们在任何情况下的行为都相同吗?

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

对比:

promise.then(f1, f2);

简要回答就是:不,它们不相等

不同之处在于,如果 f1 中出现 error,那么在这儿它会被 .catch 处理:

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

……在这儿则不会:

promise
  .then(f1, f2);

这是因为 error 是沿着链传递的,而在第二段代码中,f1 下面没有链。

换句话说,.then 将 result/error 传递给下一个 .then/.catch。所以在第一个例子中,在下面有一个 catch,而在第二个例子中并没有 catch,所以 error 未被处理。