Async 函数哪些地方优于 Promise?

async 函数是 JavaScript 中处理异步操作的一种高级语法糖,它基于 Promise,但提供了更简洁和易读的语法。以下是我在工作过程中总结的 async 函数相对于 Promise 的一些优势:

1. 串联地执行多个异步操作

async function getArticleList() {
const articles = []
let i = 0
while (i++ < 100) {
// 假设为了减轻服务端并行压力,接口要依次请求
articles.push(await axios.get({'/api/article', params: { id: i }}))
}
return articles
}

2. 多个异步操作统一 catch

async function doSomething() {
try {
const response1 = await fetch(url1); // 1
const data1 = await response1.json(); // 2

const response2 = await fetch(url2); // 3
const data2 = await response2.json(); // 4

console.log(data1, data2);
} catch (error) {
// 这里将 1~4 四处可能产生的异常统一处理
console.error('Error:', error);
}
}

3. 结合 switch 将多个异或关系的异步操作的 then 集中在一处

const mode: ref<'create' | 'update'>;

const handleFormConfirm = async (form) => {
switch (mode.value) {
case 'create':
await createCreature(form);
break;
case 'update':
await updateCreature(form);
break;
}
// 这里相当于 createCreature 或 updateCreature 共同的 then
};

以上就是我总结的一些特殊案例,如果使用 Promise,几乎难以达到同样目的同时代码仍简洁易读。大家还能想到哪些?欢迎补充!