我最近开始在一个副项目上研究将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()关键字异步运行。我也了解该函数正在要求该函数等待一次查询的结果,但我不了解的一个是调用该函数以返回快照时使用异步。可能有文档或问题向您展示了如何操作,但没有人回答我想了解的工作原理。
答案 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 });