我在連接到 Firestore 時遇到問題。基本上,在我的 Web 應用程式中,我想從資料庫中獲取檔案,檔案ID 以我在輸入中傳遞的字符開頭。如果它們不存在,我會做一個 while 回圈,在其中隨機生成字符并嘗試查找以該字符開頭的檔案:
var characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
var randomCharacter = Math.floor(Math.random() * characters.length);
this.s = characters.charAt(randomCharacter);
console.log(this.s)
this.getItems(this.s, characters).then((data) => {
this.items = data
console.log(data)
this.item0 = this.items[0]
console.log(this.item0)
})
async getItems(randomCharPosition, characters) {
const itemRef = await firebase.firestore().collection("junction/" this.itemId "/reservations");
return itemRef.orderBy(firebase.firestore.FieldPath.documentId())
.startAt(randomCharPosition).endAt(randomCharPosition "\uf8ff")
.get().then((querySnapshot) => {
if (querySnapshot.size == 0) {
console.log("First document not founded");
var flag = false
while (!flag) {
console.log("No document founded");
var randomCharacterPosition = Math.floor(Math.random() * characters.length);
var newChar = characters.charAt(randomCharacterPosition)
console.log(newChar)
return itemRef.orderBy(firebase.firestore.FieldPath.documentId()).startAt(newChar).endAt(newChar "\uf8ff")
.get().then((data) => {
if (data.size != 0) {
console.log("SIZE > 0");
flag = true
return data.docs.map(doc => doc.data());
}
else console.log("REPEAT")
})
}
}
else return querySnapshot.docs.map(doc => doc.data());
}
).catch((error) => {
console.log("Error getting document:", error);
});
}
問題是 while 回圈只執行一次,之后它退出并回傳 undefined

我在 getItems() 函式中做錯了什么?
uj5u.com熱心網友回復:
您正在呼叫return itemRef.orderBy(...以便退出while回圈和then函式。
您可以await改為使用,使代碼等待:
var flag = false
while (!flag) {
console.log("No document founded");
var randomCharacterPosition = Math.floor(Math.random() * characters.length);
var newChar = characters.charAt(randomCharacterPosition)
const data = await itemRef.orderBy(firebase.firestore.FieldPath.documentId()).startAt(newChar).endAt(newChar "\uf8ff").get()
if (data.size != 0) {
flag = true
return data.docs.map(doc => doc.data()); // ??
}
else console.log("REPEAT")
})
請注意我用 ?? 標記的那一行。由于它仍然使用 a return,因此現在將退出 while 回圈,這意味著仍然不需要該標志,您也可以使用while (true).
while (true) {
console.log("No document founded");
var randomCharacterPosition = Math.floor(Math.random() * characters.length);
var newChar = characters.charAt(randomCharacterPosition)
const data = await itemRef.orderBy(firebase.firestore.FieldPath.documentId()).startAt(newChar).endAt(newChar "\uf8ff").get()
if (data.size != 0) {
return data.docs.map(doc => doc.data());
}
else console.log("REPEAT")
})
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/386860.html
標籤:打字稿 离子框架 谷歌云firestore
