使用 await-to-js 避免在 async/await 中频繁的 try、catch
async/await ES2017 提供的能力,能让我们用同步的方式 写异步逻辑。
await 后面一般都是异步请求,异步请求就很有可能发生异常,比如:
- 网络问题导致,网络断开连接,请求不到;
- 网络慢导致异步请求超时。
一般我们异步请求的结果会在后续逻辑中继续使用,当异步发生异常时会阻塞代码运行。
处理办法:
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
是处理异步操作和错误的一个非常实用的工具,它可以让你的代码更加简洁和清晰。
版权声明:
作者:东明兄
链接:https://blog.crazyming.com/note/3170/
来源:CrazyMing
文章版权归作者所有,未经允许请勿转载。
共有 0 条评论