从Promise对象的实例内部执行的setTimeout函数捕获异常

尊敬的与会者,请告诉我解决方案。

在此代码块中,catсh方法完美地捕获了异常:

const myPromise = new Promise(() => {
  throw new Error(`Oops! Threw an exception`);
});

// We catch the exception in the method `catch`.
myPromise
  .catch((error) => console.log(error.message));

并且在此块中,不会调用catсh方法:

сonst TIMEOUT = 1000;

const mySecondPromise = new Promise((resolve, reject) => {
  setTimeout(() => {
    throw new Error(`Error in asynchronous function`);
  },
  TIMEOUT
  );
});

mySecondPromise
  .catch(() => console.log(`This code will not be executed`));

请解释:

  1. 为什么会发生这种情况(我想这是由于事件循环造成的)?
  2. 如何重写代码,以便在catch方法中捕获异常与setTimeout一起使用?

谢谢大家的回答!