iis服务器助手广告广告
返回顶部
首页 > 资讯 > 前端开发 > JavaScript >JavaScript中async await更优雅的错误处理方式
  • 470
分享到

JavaScript中async await更优雅的错误处理方式

2024-04-02 19:04:59 470人浏览 泡泡鱼
摘要

目录背景 为什么要错误处理 async await 更优雅的错误处理 小结 总结背景 团队来了新的小伙伴,发现我们的团队代码规范中,要给 async  await 添加

背景

团队来了新的小伙伴,发现我们的团队代码规范中,要给 async  await 添加 try...catch。他感觉很疑惑,假如有很多个(不集中),那不是要加很多个地方?那不是很不优雅?

为什么要错误处理

javascript 是一个单线程的语言,假如不加 try ...catch ,会导致直接报错无法继续执行。当然不意味着你代码中一定要用 try...catch 包住,使用 try...catch 意味着你知道这个位置代码很可能出现报错,所以你使用了 try...catch 进行捕获处理,并让程序继续执行。

我理解我们一般在执行 async await 的时候,一般运行在异步的场景下,这种场景一般不应该阻塞流程的进行,所以推荐使用了 try...catch 的处理。

async await 更优雅的错误处理

但确实如那位同事所说,加 try...catch 并不是一个很优雅的行为。所以我 Google 了一下,发现 How to write async await without try-catch blocks in Javascript 这篇文章中提到了一种更优雅的方法处理,并封装成了一个库——await-to-js。这个库只有一个 function,我们完全可以将这个函数运用到我们的业务中,如下所示:



export function to<T, U = Error> (
  promise: Promise<T>,
  errorExt?: object
): Promise<[U, undefined] | [null, T]> {
  return promise
    .then<[null, T]>((data: T) => [null, data]) // 执行成功,返回数组第一项为 null。第二个是结果。
    .catch<[U, undefined]>((err: U) => {
      if (errorExt) {
        Object.assign(err, errorExt);
      }

      return [err, undefined]; // 执行失败,返回数组第一项为错误信息,第二项为 undefined
    });
}

export default to;

这里需要有一个前置的知识点:await 是在等待一个 Promise 的返回值。

正常情况下,await 命令后面是一个 Promise 对象,返回该对象的结果。如果不是 Promise 对象,就直接返回对应的值。

所以我们只需要利用 Promise 的特性,分别在 promise.then 和 promise.catch 中返回不同的数组,其中 fulfilled 的时候返回数组第一项为 null,第二个是结果。rejected 的时候,返回数组第一项为错误信息,第二项为 undefined。使用的时候,判断第一项是否为空,即可知道是否有错误,具体使用如下:


import to from 'await-to-js';
// If you use CommonJS (i.e nodejs environment), it should be:
// const to = require('await-to-js').default;

async function asyncTaskWithCb(cb) {
     let err, user, savedTask, notification;

     [ err, user ] = await to(UserModel.findById(1));
     if(!user) return cb('No user found');

     [ err, savedTask ] = await to(TaskModel({userId: user.id, name: 'Demo Task'}));
     if(err) return cb('Error occurred while saving task');

    if(user.notificationsEnabled) {
       [ err ] = await to(NotificationService.sendNotification(user.id, 'Task Created'));
       if(err) return cb('Error while sending notification');
    }

    if(savedTask.assignedUser.id !== user.id) {
       [ err, notification ] = await to(NotificationService.sendNotification(savedTask.assignedUser.id, 'Task was created for you'));
       if(err) return cb('Error while sending notification');
    }

    cb(null, savedTask);
}

小结

async await 中添加错误处理个人认为是有必要的,但方案不仅仅只有 try...catch。利用 async await 和 Promise 的特性,我们可以更加优雅的处理 async await 的错误。

总结

到此这篇关于JavaScript中async await更优雅的错误处理方式的文章就介绍到这了,更多相关async await优雅错误处理内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: JavaScript中async await更优雅的错误处理方式

本文链接: https://www.lsjlt.com/news/137117.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • JavaScript中async await更优雅的错误处理方式
    目录背景 为什么要错误处理 async await 更优雅的错误处理 小结 总结背景 团队来了新的小伙伴,发现我们的团队代码规范中,要给 async  await 添加 ...
    99+
    2022-11-12
  • JavaScript如何优雅的处理async/await
    这篇文章给大家分享的是有关JavaScript如何优雅的处理async/await的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。优雅的处理 async/await使用方法:无需每次使用 async/await 都...
    99+
    2023-06-27
  • async/await中错误处理方法有哪些
    这篇文章主要介绍了async/await中错误处理方法有哪些,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。async/await优雅的错误处...
    99+
    2022-10-19
  • Javascript中async与await的捕捉错误怎么理解
    这篇文章主要介绍“Javascript中async与await的捕捉错误怎么理解”,在日常操作中,相信很多人在Javascript中async与await的捕捉错误怎么理解问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对...
    99+
    2023-06-29
  • await/async无法捕获与处理错误信息的解决方案分享
    目录前言同步和异步异步任务所存在的问题Promise如何解决回调地狱async/await,回调地狱的最终方案async/await错误处理方案第一种,手动添加啊try{}catch...
    99+
    2023-02-03
    async await捕获错误 async await错误处理 async await用法
  • 基于Day.js更优雅的处理JavaScript中的日期
    目录为什么使用day.jsMoment.jsDay.js没有day.js我们怎么办Day.js 例子1. 获取两个日期相差的天数2. 检查日期是否合法3. 获取输入日期月份的天数4....
    99+
    2022-11-12
  • 为何优先处理JavaScript中的错误
    本篇文章给大家分享的是有关为何优先处理JavaScript中的错误,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。事情的发展并非总是如愿以偿。当...
    99+
    2022-10-19
  • JavaScript中错误正确处理方式,你对了吗?
    JavaScript的事件驱动范式增添了丰富的语言,也是让使用JavaScript编程变得更加多样化。如果将浏览器设想为JavaScript的事件驱动工具,那么当错误发生时,某个事件就会被抛出。理论上可以认为这些发生的错误只是JavaScr...
    99+
    2023-06-03
  • Golang中的错误处理方式有哪些
    这篇文章主要讲解了“Golang中的错误处理方式有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Golang中的错误处理方式有哪些”吧!错误类型在Golang中,错误类型是错误处理的基本...
    99+
    2023-07-06
  • Angular中处理错误的方式是什么
    本篇内容主要讲解“Angular中处理错误的方式是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Angular中处理错误的方式是什么”吧!什么是Angula...
    99+
    2022-10-19
  • Angular中常用的错误处理方式有哪些
    本篇内容主要讲解“Angular中常用的错误处理方式有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Angular中常用的错误处理方式有哪些”吧!什么是An...
    99+
    2022-10-19
  • flask中响应错误的处理及errorhandler的应用方式
    目录flask响应错误处理及errorhandler应用flask学习笔记:错误处理1. 做好准备工作2. Flask中的错误处理3. 调试模式4. 自定义错误页面5. 通过邮件发送...
    99+
    2022-12-21
    flask响应错误处理 errorhandler的应用 flask错误处理 flask errorhandler应用
  • pycharm的debug调试以及异常,Python 中错误的处理方式
    在b站看了详细的视频教程,做一个系统的总结。第一次写关于pycharm的debug调试以及python代码运行报错处理的帖子,错误地方请大家指出。 第一个部分:pycharm的debug调试 作为一个...
    99+
    2023-09-08
    python
  • ONLINE方式在线重建索引异常中断后遇到ORA-08104错误的处理思路是什么
    这篇文章将为大家详细讲解有关ONLINE方式在线重建索引异常中断后遇到ORA-08104错误的处理思路是什么,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。 ...
    99+
    2022-10-19
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作