今天刷到掘金一遍文章 《为什么我避免使用async/await》
我觉得不对,理由如下:
1. Async/Await 性能问题
const processData = async ({ userData, sessionPrefences }) => {
await save('userData', userData);
await save('session', sessionPrefences);
return { userData, sessionPrefences }
}
const processData = ({ userData, sessionPrefences }) => Promise.all([
save('userData', userData),
save('session', sessionPrefences)
])
.then(() => ({ userData, sessionPrefences })
⚔️ 两个顺序无关的异步,可以用await Promise.all 。
⚔️ 单独 await ,是当你对 执行顺序 有要求的时候,比如下面两种情况。
2. try/catch的尴尬
const processData = async ({ userData, sessionPrefences }) => {
try {
await save('userData', userData);
await save('session', sessionPrefences);
return { userData, sessionPrefences }
} catch (err) {
handleErrorSomehow(err)
}
}
⚔️ 每一个 async 函数,都可以直接 .catch
3. .then 更加易读
const id = 5
const lotsOAsync = () => fetch('/big-o-list')
.then((result) => result.ok ? result.json() : Promise.reject(`Couldn't fetch big-o-list`))
.then(({ items }) => items.find((item) => item.id === id))
.then(({url}) => fetch(url))
.then((result) => result.ok ? result.json() : Promise.reject(`Couldn't fetch ${result.request.url}`))
.then((data) => data.name)
⚔️ 直接翻译成 对应的 asycn await ,我觉得他说的对,
⚔️ 但,我封装了一下 fetch,再看看
总结:
不需要避免 使用 async await ,
但你需要区分 异步是否顺序执行,避免多余的await。
async函数内部不需要try catch ,调用时.catch 效果一样。