如何链接javascript承诺和错误

时间:2016-04-01 10:21:35

标签: javascript promise es6-promise

假设:

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);

需要的?

1 个答案:

答案 0 :(得分:1)

  

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

是的,如果你计划从这些处理程序链接其他then处理程序,那么需要这个或类似的东西因此需要保留("传递")承诺的价值和地位。但是,即使你打算那样做:

  1. 而不是return Promise.resolve(p1res);它会更简单,相当于只说return p1res;

  2. 而不是return Promise.reject(err);代替throw err;会更简单和等效,继续使用"原因"在错误路径上的承诺err

  3. 但是,如果您的目标仅仅是拥有一个处理程序来记录状态,那么您不需要,也可能不希望从那里链接后续处理程序,因为这将需要您去额外的麻烦以确保状态报告处理程序返回值或重新抛出错误以获得下游处理程序的好处。相反,您可以将状态报告处理程序放在一个单独的"分支上,而不用担心它们返回或通过的内容:

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