在catch函数中,返回了被拒绝的承诺,但是没有解决的承诺?

时间:2019-07-03 10:21:11

标签: javascript promise

我的函数caller调用了一个函数parent,该函数本身调用了child。如果child错误,那么我需要返回caller

当我reject兑现承诺时,此方法有效,但是,当我尝试并返回承诺resolve时,它并未返回至caller

function caller() {
  return parent()
}       

async function parent(){
  const child = await foo(
    // more code
  ).catch(error=>{
    if(error === 123) {
      return Promise.resolve("This was resolved"); 
    }
    return Promise.reject("This was rejected");
  })
}

我认为try / catch块会起作用,但是我更喜欢上面的语法。

1 个答案:

答案 0 :(得分:0)

问题是您没有从child返回parent

这是一个简单的例子,

function caller() {
    return parent()
}

 async function parent() {
    const child = await foo()
    .catch(error => {
        if (error === 123) {
            return Promise.resolve("This was resolved");
        }
        return Promise.reject("This was rejected");
    })
    return child;
}

function foo(){
    return Promise.reject(123);
}
caller().then(console.log);//This was resolved

注意:然后完全不建议再次将async/awaitthen/catch混合。但是我认为显而易见的原因是可读性。