【问题标题】:Is there any need of async/await in useEffect?useEffect 中是否需要 async/await?
【发布时间】:2021-08-09 00:17:48
【问题描述】:

我正在处理一个项目,并且正在使用 Firebase 的 Firestore 数据库。重新加载页面后,我想从数据库中获取数据。因此,即使没有异步等待,以下代码也可以正常工作。但是我研究过在调用 API/DATA 时我们需要 async/await,如果我错了,请帮助我?

useEffect(() => {
      db.collection('database_mcq').onSnapshot(snapshot => { setMcq(snapshot.docs.map(doc => doc.data())) })
      
  }, [])

【问题讨论】:

标签: reactjs firebase async-await use-effect


【解决方案1】:

这不仅是不必要的,它也是forbidden - 如果你尝试使用异步函数,React 会抛出一个错误,因为从效果回调中唯一可以返回的应该是一个函数或者什么都没有(而不是承诺)。

相反,使用.then - 如果您使用标准 Promises - 或使用您正在使用的 API 提供的任何其他方法来与异步交互。在你的情况下,onSnapshot 正在履行这个角色 - 不需要做任何其他特别的事情。

即使在标准 JavaScript 中,也没有要求使用async/await,因为它只是.then 的语法糖。

【讨论】:

  • 您可以在效果挂钩中使用 async/await,方法是在挂钩中创建异步函数并调用该函数,就像在您链接的示例中一样。
  • @SeanW 你可以,但你应该吗?
  • 视情况而定 - 如果您有一些依赖的承诺,在某些情况下可能很难遵循链接。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-07
  • 2017-10-26
  • 1970-01-01
  • 2016-09-10
  • 2018-07-16
相关资源
最近更新 更多