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

我如何从一个被拒绝的承诺中“抛出”内部“捕获”方法,并由外部“捕获”块处理?

  •  1
  • cbdeveloper  · 技术社区  · 6 年前

    这很管用!

    function rejectedPromise() {
      return Promise.reject("ERROR");
    }
    
    async function someFunction() {
      try {
        rejectedPromise()
        .catch((err) => console.log(err));   // IT WORKS ! THE ERROR IS BEING LOGGED HERE
      }
      catch(err) {
        console.log(err);
      }
    }
    
    someFunction();

    这不是。

    function rejectedPromise() {
      return Promise.reject("ERROR");
    }
    
    async function someFunction() {
      try {
        rejectedPromise()
        .catch((err) => { throw err; });      // CAN'T I THROW HERE ?
      }
      catch(err) {
        console.log(err);                     // DOES NOT WORK. THE ERROR SHOULD BE LOGGED HERE
      }
    }
    
    someFunction();

    问题

    为什么?

    注:我的目标是 throw catch 拒绝承诺的方法 所以它是由外部 抓住 封锁。不知道这是否重要,但这是发生在 async 函数(如果删除 异步

    额外:

    在Node中,我得到这个(即使有一个catch块):

    未处理的PromiseRejectionWarning: .catch()。(拒绝id:1)

    0 回复  |  直到 6 年前
        1
  •  1
  •   Felix Kling    6 年前

    正如评论中指出的,没有必要使用 .catch() 如果你在一个 async try...catch ,但看起来这将实现您想要的目标:

    function rejectedPromise() {
      return Promise.reject("ERROR");
    }
    
    async function someFunction() {
      try {
        try {
          await rejectedPromise()
        } 
        catch(err) {
          throw err;
        }
      }
      catch(err) {
        console.log(err);
      }
    }
    
    someFunction();
    
    推荐文章