代码之家  ›  专栏  ›  技术社区  ›  Andrew

承诺异常处理,并尝试/捕获与我预期相反的操作

  •  1
  • Andrew  · 技术社区  · 3 年前

    假设我有以下函数

    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
    

    我的假设(显然是错误的)是 resolve 在我的承诺中 test() 会导致 f() 执行时没有问题,相反,调用 reject 在里面 test2() 会导致 f2() 执行。然而,情况恰恰相反。关于为什么打电话,我的基本误解是什么 resolve() 导致错误被捕获?

    1 回复  |  直到 3 年前
        1
  •  2
  •   helloitsjoe    3 年前

    问题是 resolve reject 应该反过来。Promise构造函数的参数取决于位置而不是名称,因此名称并不是您所期望的。第一个论点总会解决,第二个论点总会被拒绝。

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

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

    推荐文章