导读 | 这篇文章主要为大家介绍了await 错误捕获实现方式源码示例解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪 |
Promise 是一种在 JavaScript 中用于处理异步操作的机制。Promise 在开发中被广泛使用,这篇文章将学习如何优雅的捕获 await 的错误。
资源:
仓库地址:await-to-js
参考文章:How to write async await without try-catch blocks in Javascript (grossman.io)
示例代码如下:
const myPromise = new Promise(function(resolve, reject) { // 执行异步操作 setTimeout(function() { // 异步操作成功 resolve('Success'); }, 1000); }); // 处理 Promise 的成功和失败结果 myPromise.then(function(result) { // 处理成功结果 console.log(result); }).catch(function(err){ // 处理失败 console.log(err) })
异步函数正在等待 Promise,因此当 promise 遇到错误时,它会抛出一个异常,该异常将在 promise 的 catch 方法中捕获。
其他处理错误的方式:
try{ const res = await myPromise() }catch(e){ console.log(e) }
当代码中有大量的异步操作时,就需要有很多的try/catch 块,代码看起来就很臃肿,那么有什么更好的处理这些错误的办法呢?
这个项目的 slogan 是:
Async await wrapper for easy error handling
异步等待包装,方便错误处理
用法:
import to from 'await-to-js'; [ err, user ] = await to(UserModel.findById(1)); if(!user) return cb('No user found');
to 函数接收一个 Promise,然后将成功响应解析为数组,并将返回数据作为第二项。从捕获中收到的错误作为第二项。
/** * @param { Promise } promise * @param { Object= } errorExt - Additional Information you can pass to the err object * @return { Promise } */ export function to( promise: Promise , errorExt?: object ): Promise<[U, undefined] | [null, T]> { return promise .then<[null, T]>((data: T) => [null, data]) .catch<[U, undefined]>((err: U) => { if (errorExt) { const parsedError = Object.assign({}, err, errorExt); return [parsedError, undefined]; } return [err, undefined]; }); } export default to;
接收一个 Promise 实例和一个可选的 errorExt 对象作为参数。该函数返回一个新的 Promise。
原理是使用 then 方法处理 Promise 的成功结果,并使用 catch 方法处理 Promise 的失败结果。如果 Promise 执行成功,则会将结果包装成一个包含两个元素的数组并作为新的 Promise 的成功结果返回;如果 Promise 执行失败,则会将错误对象包装成一个包含两个元素的数组并作为新的 Promise 的失败结果返回。
使用await-to-js,得以一行代码完成对异步代码错误的捕获,阅读文章得知,await-to-js 是作者通过goLang启发得来的灵感。更加说明了融会贯通,学以致用的重要性。
原文来自:
本文地址://gulass.cn/await-linux-await.html编辑:向云艳,审核员:逄增宝
Linux大全:
Linux系统大全: