优雅地 `async/await`
Posted wayou
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了优雅地 `async/await`相关的知识,希望对你有一定的参考价值。
比如下面这样,一个简单的 Node.js 中使用 const fetch = require("node-fetch");
async function getData() {
const url = "https://api.github.com/users/wayou";
try {
const response = await fetch(url);
const data = await response.json();
console.log(data);
} catch (error) {
throw error;
}
}
getData(); 像这样的异步场景,Node.js 中会有很多。如果都通过 将异步进行一层封装因为本质上 比如下面这样: function await2js(promise) {
return promise.then(result => [undefined, result]).catch(error => [error, undefined]);
} 该方法始终返回两个结果,第一个是错误,第二个是数据,这和 Node.js 中回调的入参 所以改造后的使用示例: async function getData() {
const url = "https://api.github.com/users/wayou";
const [error, response] = await await2js(fetch(url));
if (error) {
throw error;
}
const [error2, data] = await await2js(response.json());
if (error2) {
throw error2;
}
console.log(data);
} 这层封装针对单个 当然,如果嫌麻烦,也可通过 TypeScript 版本function await2js<T, K = Error>(promise: Promise<T>) {
return promise
.then<[undefined, T]>((response: T) => [undefined, response])
.catch<[K, undefined]>((error: K) => [error, undefined]);
} 这里有个相应的 npm 包便是做这事情的 await-to-js。 相关资源 |
以上是关于优雅地 `async/await`的主要内容,如果未能解决你的问题,请参考以下文章
如何优雅处理 async await 错误——解读小而美的 awaitjs 库
优雅地处理 `await`ed Javascript Promise 上的拒绝
如何优雅处理 async await 错误——解读小而美的 await-to-js 库