使用 await-to-js 避免在 async/await 中频繁的 try、catch

chat

async/await ES2017 提供的能力,能让我们用同步的方式 写异步逻辑。

await 后面一般都是异步请求,异步请求就很有可能发生异常,比如:

  1. 网络问题导致,网络断开连接,请求不到;
  2. 网络慢导致异步请求超时。

一般我们异步请求的结果会在后续逻辑中继续使用,当异步发生异常时会阻塞代码运行。

处理办法:

1.await 命令后面一般是一个 Promise。直接使用.catch来捕获异常。

2.在 axios 响应拦截做处理,拦截错误并给一个约定的错误码。

3.onUnhandledRejection 全局 未处理的 reject。

3.推荐使用 await-to-js 处理: https://www.npmjs.com/package/await-to-js

这个包很小 370b,giz压缩后仅 242b。

来自 chatgpt 的回答:

await-to-js 是一个简单的工具,用于帮助处理 JavaScript 中的异步操作,特别是在使用 async/await 语法时。它能够帮助你以一种更优雅的方式处理错误,避免过多的 try-catch 块。这个库的主要思想是将异步操作的结果包装成一个数组,其中第一个元素是错误(如果操作失败了),第二个元素是结果(如果操作成功了)。

安装

你可以通过 npm 来安装 await-to-js

npm install await-to-js

或者使用 yarn:

yarn add await-to-js

基本用法

在没有使用 await-to-js 之前,你可能会这样写代码来处理异步操作和错误:

async function fetchData() {
    try {
        const data = await fetchSomeData();
        console.log(data);
    } catch (err) {
        console.error(err);
    }
}

使用 await-to-js 后,你可以这样做:

import to from 'await-to-js';

async function fetchData() {
    const [err, data] = await to(fetchSomeData());
    
    if (err) {
        console.error(err);
        return;
    }
    
    console.log(data);
}

为什么使用 await-to-js

使用 await-to-js 的主要好处是代码更加清晰和简洁。它避免了过多的 try-catch 块,使得错误处理逻辑更加集中。此外,它也使得代码的意图更加明确,即处理异步操作可能会失败的情况。

高级用法

await-to-js 还支持一些高级特性,比如自定义错误处理函数。这可以通过传递一个配置对象来实现,例如:

const [err, data] = await to(fetchSomeData(), { errorExt: { custom: 'This is a custom error!' } });

这里的 errorExt 对象会被合并到错误对象中,这样你就可以在错误处理时获取到更多的上下文信息。

总的来说,await-to-js 是处理异步操作和错误的一个非常实用的工具,它可以让你的代码更加简洁和清晰。

本文通过 YUQUE WORDPRESS 同步自语雀

版权声明:
作者:东明兄
链接:https://blog.crazyming.com/note/3170/
来源:CrazyMing
文章版权归作者所有,未经允许请勿转载。

THE END
分享
二维码
海报
使用 await-to-js 避免在 async/await 中频繁的 try、catch
async/await ES2017 提供的能力,能让我们用同步的方式 写异步逻辑。 await 后面一般都是异步请求,异步请求就很有可能发生异常,比如: 网络问题导致,网……
<<上一篇
下一篇>>
chat