gpt4 book ai didi

javascript - Firebase:child_added 完成后如何获取数据

转载 作者:行者123 更新时间:2023-11-29 11:01:02 24 4
gpt4 key购买 nike

我有一个案例需要获取所有 event 对象。每个 event 对象都有一个属性 city_id,它是与所有 cities 列表中的单个 city 对象的关系键>.

...
|- events
| |- event_id
| | |- title
| | |- city_id
|
|- cities
| |- city_id
| | |- name
| | |- location
...

所以我正在做一些类似join 查询的事情:

const rootRef = firebase.database().ref();

async function getAllEvents() {
const eventsRef = rootRef.child('events');
const eventsArray = [];

await eventsRef.on('child_added', async (snapshot) => {
const eventObject = snapshot.val();
const cityObject = await getEventCity(eventObject.city_id);
eventObject.city = cityObject;
eventsArray.psuh(eventObject);
});

return eventsArray;
}

function getEventCity(cityId) {
return rootRef.child('cities')
.child(cityId)
.once('value', (venue) => {
return venue.val();
});
}

一切都适用于查询。问题是我想获取数组中的所有事件,但以下代码不起作用:

const allEvents = getAllEvents();

eventsRef.on('child_added) 之前我有 await 的事件它仍然返回初始空数组。

我做错了什么,当 .on('child_added') 上的所有内容都已完成获取时,我该如何捕获这一刻?

最佳答案

唯一知道何时加载初始数据的方法是使用 value 事件。我还没有真正使用过 async/await,但希望您会需要这样的东西:

async function getAllEvents() {
const eventsRef = rootRef.child('events');
const eventsArray = [];

await eventsRef.on('value', async (snapshot) => {
snapshot.foreach(function(child) {
const eventObject = child.val();
const cityObject = await getEventCity(eventObject.city_id);
eventObject.city = cityObject;
eventsArray.push(eventObject);
});
});

return eventsArray;
}

关于javascript - Firebase:child_added 完成后如何获取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47079637/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com