为什么“unhandledrejection”无法捕获 JSON.parse() 的错误?

Cod*_*yte 6 javascript promise unhandled-promise-rejection

我尝试从 抛出一个错误JSON.parse(),我希望“unhandledrejection”事件会捕获它:

window.addEventListener('unhandledrejection', event => {
  console.log('unhandledrejection:', event.reason?.message || event.reason);
});

Promise.resolve("{")
  .then((data) => {
    JSON.parse(data)
  });
Run Code Online (Sandbox Code Playgroud)

但是(Chrome 的)控制台中出现 Uncaught (承诺):

Uncaught (in promise) SyntaxError: Unexpected end of JSON input
  at JSON.parse (<anonymous>)
  ...
Run Code Online (Sandbox Code Playgroud)

我尝试了更多抛出错误的方法,它们都可以被捕获:

Uncaught (in promise) SyntaxError: Unexpected end of JSON input
  at JSON.parse (<anonymous>)
  ...
Run Code Online (Sandbox Code Playgroud)

我试图重新抛出错误,但它仍然无法被“unhandledrejection”捕获:

window.addEventListener('unhandledrejection', event => {
  console.log('unhandledrejection:', event.reason?.message || event.reason);
});

Promise.resolve("{")
  .then((data) => {
    eval(data)
  }); // unhandledrejection: SyntaxError: Unexpected end of input

Promise.resolve()
  .then(() => {
    throw 123
  }); // unhandledrejection: 123
Run Code Online (Sandbox Code Playgroud)

我想知道为什么这个错误没有被捕获。