从嵌套的承诺中捕获错误

时间:2019-05-13 21:40:23

标签: javascript promise

我有诺言-父母,孩子和孙子。如果我正确理解了诺言不会冒泡将错误从Granchild传递给父项,那么当我在孙子项中抛出错误时,我需要将其捕获在子项中,然后再次将其抛出并最终陷入父项中。例如

const grandchildPromise = () => {
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      throw 'some error msg';
    }, 100)
  });
};

const childPromise = () => {
  return new Promise(async(resolve, reject) => {
    try {
      await grandchildPromise();
    } catch(e) {
      console.log('caught in childPromise');
      reject(e);
    }
  });
};

const parentPromise = () => {
  return new Promise(async(resolve, reject) => {
    try {
      await childPromise();
    } catch(e) {
      console.log('caught in parentPromise');
      reject(e);
    }
  });
}

parentPromise()
  .then(() => {
      console.log('fullfilled')
  })
  .catch(e => console.log(e));

,但是它从不控制台“在childPromise中捕获”。那是一回事。

另一种情况是,我可能不应该将async作为执行者传递给new Promise,但我真的不知道如何重构该代码以不更改await就不这样做语法。

所以我有两个问题:

  • 为什么不安慰childPromise?
  • 如何重构此代码,以使我不会以执行者身份传递异步?

Demo以上代码。

0 个答案:

没有答案