不清楚在本机中异步和等待的用法

时间:2019-04-09 07:24:20

标签: firebase react-native firebase-realtime-database async-await expo

我最近开始在一个副项目上研究将React Native与Expo一起使用。我想从Firebase异步加载数据,并且经过大量尝试和谷歌搜索已经实现了它,但是我仍然不完全了解它是如何工作的。

@objc func parkingTimerTapped(_ sender: Any) {
    let pp = ParkingModeScheduleView()
    let navigation = UINavigationController(rootViewController: pp)
    self.present(navigation, animated: true, completion: nil)
    print("Parking Timer Tapped")
 }

在下图中,我了解到我正在告诉componentDidMount通过async()关键字异步运行。我也了解该函数正在要求该函数等待一次查询的结果,但我不了解的一个是调用该函数以返回快照时使用异步。可能有文档或问题向您展示了如何操作,但没有人回答我想了解的工作原理。

1 个答案:

答案 0 :(得分:1)

ref.once()link to API docs)返回一个承诺,该承诺将在数据库查询完成时解决。您也可以像现在一样提供回调,但是在异步函数中,这只会使事情变得更复杂。您应该使用返回的承诺。它将使您的代码更易于阅读。

此外,您应该在某个时候调用val(),以将快照子级转换为实际上是字符串的级联。我会猜测何时应该发生,但是由于您未提供数据库结构,因此无法确定。

const snapshot = await ref.once('value');
const urls = [];
snapshot.forEach(urlSnapshot => {
    urls.push(urlSnapshot.val());
});
this.setState({ items: urls });