记录--try...catch知识补全

这篇具有很好参考价值的文章主要介绍了记录--try...catch知识补全。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助

记录--try...catch知识补全

说到try...catch都觉得非常熟悉了,不就是用来捕捉代码块中的错误嘛,平时也用得比较多的。然而因为了解不够多,我的面试却栽在了一个简单的知识点上:try...catch只能捕捉到同步执行代码块中的错误。 题目是:以下代码有错吗?如果有错,应该如何改正?
try {
  setTimeout(() => {
    throw new Error('err')
  }, 200);
} catch (err) {
  console.log(err);
}

try {
  Promise.resolve().then(() => {
    throw new Error('err')
  })
} catch (err) {
  console.log(err);
}

反正就是不知道咋回事,我之前的知识储备中就是没有这个知识点:try...catch不能异步捕获代码错误,因为它本身就是一个同步代码块。所以看到这道题我就懵了,平时代码不就是这样写的吗,用try...catch来捕获错误,所以当时就直接回了我不知道,感觉没有啥错误。。。,面试官无奈的看了我一眼,下来可以了解一下,然后就没有然后了。

下来我就赶紧查了资料,才知道try...catch不能异步捕获代码错误。在JavaScript中,setTimeout是一个异步函数,它的回调函数会在指定的延时后被放入事件队列,等待当前执行栈清空后才执行。因此,当setTimeout的回调函数执行并抛出错误时,try...catch已经执行完毕,无法捕捉到异步回调中的错误。

正确的做法是在异步操作中直接处理错误,例如使用回调函数、Promises或者async/await结合try...catch

new Promise((resolve, reject) => {
  setTimeout(() => {
    try {
      throw new Error('err');
    } catch (err) {
      reject(err);
    }
  }, 200);
})
  .then(() => {
    // 正常执行时的处理逻辑
  })
  .catch((err) => {
    console.log(err); // 这里会捕捉到错误
  });

至于第二个例子,尝试使用try...catch来捕捉一个在Promise链中抛出的错误。这种方式同样是无效的,因为try...catch不能捕捉到在Promise链中的异步错误。

Promise对象用于表示一个异步操作的最终完成(或失败),及其结果值。一个Promise的状态可能是以下几种:

  • Pending(等待态) :初始状态,既不是成功,也不是失败状态。
  • Fulfilled(成功态) :意味着操作成功完成。
  • Rejected(失败态) :意味着操作失败。

在Promise中抛出一个错误(例如通过throw语句)会导致Promise被拒绝(或失败)。要正确处理这个错误,需要在Promise链中使用.catch方法或者在一个async函数中使用try...catch

// 方法一
Promise.resolve()
  .then(() => {
    throw new Error('err');
  })
  .catch((err) => {
    console.log(err); // 这里会捕捉到错误
  });

// 方法二
async function handleError() {
  try {
    await Promise.resolve().then(() => {
      throw new Error('err');
    });
  } catch (err) {
    console.log(err); // 这里会捕捉到错误
  }
}

handleError();

本文转载于:

https://juejin.cn/post/7316539952475619362

如果对您有所帮助,欢迎您点个关注,我会定时更新技术文档,大家一起讨论学习,一起进步。

 记录--try...catch知识补全文章来源地址https://www.toymoban.com/news/detail-760583.html

到了这里,关于记录--try...catch知识补全的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • try catch执行过程分析

    本篇文章带大家聊聊try catch的执行过程,有时候在开发的过程中,try代码里如果出现异常,catch后的步骤还会继续执行吗?以及finally的使用。 下面来分析一下几种使用场景: 场景一: try代码块中出现异常后,系统会继续执行catch代码块的程序。catch代码块外的代码也会继续被

    2024年02月15日
    浏览(41)
  • Java try catch语句详解

    在实际应用中,对于错误的处理是极其重要的,任何程序都很难做到百分百完美,程序中可能存在大量未知问题,所以程序开发时一定要对各种问题进行相应的处理,而 Java 提供的异常处理机制可以帮用户更好地解决这方面的问题。 Java 的异常处理机制可以让程序具有极好的

    2024年02月08日
    浏览(40)
  • 深入理解try...catch(字节码层面)

    我们工作中常用try...catch来解决程序中出现的异常情况,但是你真的了解它的实现原理吗?今天我就带着大家从字节码层面理解try...catch 我们首先需要准备好异常类和对应的测试类方便我们观察。 异常类: 测试类: 在idea中编译后,使用jclasslib插件即可查看对应的字节码,字

    2024年02月02日
    浏览(35)
  • C#中try-catch语句

            在C#中,try-catch语句是一种异常处理机制,用于捕捉代码中发生的异常并作出相应的处理,防止程序因异常而崩溃。 try块中包含可能会出现异常的语句或代码块。当try块中的语句或代码块执行过程中发生异常时,程序会立即跳转到catch块,并执行catch块中的语句。

    2024年02月14日
    浏览(41)
  • try-catch以及使用技巧

    try-catch 是 JavaScript 处理错误的一种重要机制。try 块用来包含可能会出错的代码,catch 块用来处理 try 块中的错误。使用 try-catch 的主要目的是在代码出错时不会导致整个程序崩溃,可以让错误被妥善处理。 如果你想捕获代码中所有可能的异常,可以使用一个不带参数的 catch 代码

    2024年02月22日
    浏览(42)
  • kotlin协程异常处理之-try catch

    kotlin协程小记 协程的async使用 kotlin协程异常处理之-try catch kotlin协程异常处理之-CoroutineExceptionHandler try catch是否一定有效呢?未必,来看一下: withContext是一个挂起函数,它会暂停当前协程的执行,等待传递进来的协程上下文切换后继续执行。当在withContext内部发生异常时,

    2024年02月12日
    浏览(35)
  • 不要在代码中随便使用try...catch了

    前言  📫 大家好,我是南木元元,热爱技术和分享,欢迎大家交流,一起学习进步!  🍅  个人主页: 南木元元 目录 背景 js中的try...catch try...catch运行机制 js的事件循环机制 try...catch无法捕获异步错误的原因 解决方法 结语 之前面某物的时候,遇到了一个有关try...catch的问

    2024年03月14日
    浏览(64)
  • 如何优雅的写个try catch的方式!

    丑陋的 try catch 代码块 优雅的 Controller 上面的示例,还只是在 Controller 层,如果是在 Service 层,可能会有更多的 try catch 代码块。这将会严重影响代码的可读性、“美观性”。 所以如果是我的话,我肯定偏向于第二种,我可以把更多的精力放在业务代码的开发,同时代码也会

    2024年02月01日
    浏览(39)
  • 使用try...catch语句优雅地处理JavaScript错误

    🧑‍🎓 个人主页: 《爱蹦跶的大A阿》 🔥 当前正在更新专栏: 《VUE》 、《JavaScript保姆级教程》、《krpano》、《krpano中文文档》 ​  目录 ✨ 前言 ✨ 正文 简介 语法 示例 错误对象 抛出错误 finally 语句 总结 ✨ 结语   ​         JavaScript作为一门脚本语言,代码运行时

    2024年01月22日
    浏览(55)
  • C++ try-catch语法分析与应用

    通过前面的学习,我们了解了try-catch语法的基本使用。但是,C++提供的异常处理机制很全面,下面再具体分析。 发生异常的时候,我们可以主动抛出一个异常,所以,使用throw抛出一个异常。异常可以是一个数值,字符,或者表达式。 抛出的异常可以有try-catch语句捕获。tr

    2024年02月16日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包