反驳 《为什么我避免使用async/await 》

462 阅读1分钟

 今天刷到掘金一遍文章 《为什么我避免使用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 效果一样。