首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么函数A不能捕获函数B抛出的错误

为什么函数A不能捕获函数B抛出的错误
EN

Stack Overflow用户
提问于 2022-01-24 15:34:56
回答 1查看 43关注 0票数 0

我正在试着在JavaScript上做练习。

这是我的密码

代码语言:javascript
复制
function getTime1() {
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      resolve(11111);
    }, 1000);
  });
}

function getTime2() {
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      resolve(22222);
    }, 1000);
  });
}

async function funB() {
  // try {
  let b = await getTime2();
  throw "B error";
  // } catch (e) {
  //   console.log("this" + e);
  // }
}

async function funA() {
  try {
    let a = await getTime1();
    funB();
  } catch (e) {
    console.log("that" + e);
  }
}
funA();

这是结果

未知(承诺)B错误

我想知道为什么漏斗和漏斗鱼没有抓到。谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-01-24 17:23:23

据我理解,try/catch不适用于异步:

“因为errorTest是异步的,所以它总是返回承诺,永远不会在调用它的地方开始执行:它是异步的。errorTest返回,然后在运行errorTest中的一行代码之前退出errorTest块。因此,您的catch块永远不会触发,因为errorTest中没有任何东西会同步抛出异常。”

来源:Why is try {} .. catch() not working with async/await function?

由于异步将返回一个承诺,我相信您将需要使用承诺本身的捕获

代码语言:javascript
复制
funB().then((result) => {
    console.log(result);
}).catch((error) => {
    console.error(error);
});
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70836391

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档