Promise 异常处理和 try/catch 做与我期望相反的事情

Promise exception handling and try/catch doing the opposite of what I would expect

假设我有以下功能

async function test() {
  return new Promise<string>((reject, resolve) => {
    resolve("test OK");
  });
}

async function test2() {
  return new Promise<string>((reject, resolve) => {
    reject("test error");
  });
}

async function f() {
  try {
    await test();
  } catch (err) {
    console.log("error test 1");
  }
}

async function f2() {
  try {
    await test2();
  } catch (err) {
    console.log("error test 2");
  }
}

f(); //This prints 'error test 1'
f2(); //This prints nothing

我的假设(显然不正确)是在 test() 返回的承诺中调用 resolve 会导致 f() 无问题地执行,相反,调用 reject in test2() 会导致 f2() 的 catch 块执行。然而,恰恰相反。关于为什么调用 resolve() 导致错误被捕获,我的根本误解是什么?

问题是 resolvereject 应该颠倒过来。 Promise 构造函数的参数取决于位置而不是名称,因此名称并不代表您所期望的。第一个参数总是 resolve,第二个参数总是 reject。

return new Promise<string>((resolve, reject) => {

Promise 构造函数 MDN 文档供参考:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/Promise#creating_a_new_promise