如何链接javascript承诺和错误

how to chain javascript promises and errors

本文关键字:javascript 承诺 错误 链接 何链接      更新时间:2023-11-05

假设:

function f() {
  return p1()
    .then(function(p1res) {
       console.log('p1 ok');
       return Promise.resolve(p1res);
    }, function(err) {
       console.log('p1 err '+err);
       return Promise.reject(err);
    }).then( ... proceed

报表是吗

return Promise.resolve(p1res);

return Promise.reject(err);

需要吗?

是否需要语句return Promise.resolve(p1res);return Promise.reject(err);

是的,如果您计划从这些处理程序链接额外的then处理程序,因此需要保留("传递")promise的值和状态,则需要。然而,即使你要这样做:

  1. 代替return Promise.resolve(p1res);,它将更简单并且等效于仅仅说return p1res;

  2. 与其说return Promise.reject(err);,不如说throw err;,用"原因"err在错误路径上继续承诺。

但是,如果您的目标只是让一个处理程序来记录状态,那么您不需要也可能不想从那里链接后续处理程序,因为这将需要您付出额外的麻烦来确保状态报告处理程序返回值或重新抛出错误,以利下游处理程序。相反,您可以将状态报告处理程序放在一个单独的"分支"上,而不必担心它们返回或通过什么:

function f() {
  let result = p1();
  result . then(
      function(p1res) { console.log('p1 ok'); }, 
      function(err)   { console.log('p1 err ', err); });
  result . then(
    ...proceed