下面的代碼是我一直在嘗試做的,但dbRef.on("child_added...在結束檢查后執行。我知道為什么會發生這種情況,所以我怎么能一次對 firebase 路徑中的每個孩子做一個類似的條件,然后再執行檢查。謝謝。
let dbRef = firebase.database().ref("/ExamplePath");
let found = false;
dbRef.on("child_added", (child) => {
if (child.val().test == testingVal) {
console.log("Found One!");
found = true;
}
});
if (found) {
console.log("Finished!");
}else{
console.log("Nope!");
}
uj5u.com熱心網友回復:
為每個child_added孩子呼叫處理程式,并且無法在其中知道這是否是最后一個孩子。為此,您需要收聽該value事件。
所以一種選擇是:
let dbRef = firebase.database().ref("/ExamplePath");
let found = false;
dbRef.on("child_added", (child) => {
if (child.val().test == testingVal) {
console.log("Found One!");
found = true;
}
});
dbRef.on("value", (snapshot) => {
if (found) {
console.log("Finished!");
}else{
console.log("Nope!");
}
});
這很好用,Firebase 確保資料只下載一次,盡管它被傳遞給兩個偵聽器。
如果你愿意,你也可以只用一個value 監聽器來做同樣的事情:
let dbRef = firebase.database().ref("/ExamplePath");
dbRef.on("value", (snapshot) => {
let found = false;
snapshot.forEach((child) => {
if (child.val().test == testingVal) {
console.log("Found One!");
found = true;
}
});
if (found) {
console.log("Finished!");
}else{
console.log("Nope!");
}
});
兩種方法的結果和效率是相同的,因此您應該選擇對您的應用程式最方便的方法。例如,child_當我負責直接更新 UI 中的每個元素時,我更喜歡監聽事件,因為child_*事件非常直接地告訴我該做什么。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/498229.html
