我是 firebase 新手,對反應也很陌生,我正在開發一個購物清單應用程式。我使用這樣的方式將檔案添加到我的資料庫setDoc()中:
const addToFirestore = async () => {
if (tilesToDB.indexOf(tile) === -1) {
setTilesToDB((prev) => [...prev, tile]);
await setDoc(doc(db, 'list', tile.contents), tile);
}
}
通過單擊添加按鈕或在輸入專案名稱后單擊外部輸入欄位來添加專案。當我嘗試通過 deleteDoc() 以類似方式洗掉檔案時:
const removeFromFirestore = async (id) => {
const docRef = (db, 'list', id);
await deleteDoc(docRef).then(() => {
console.log("Entire Document has been deleted successfully.")
})
.catch(error => {
console.log(error);
});
}
然后通過單擊洗掉按鈕呼叫上述函式:
onClick={(e) => {
e.preventDefault();
console.log(tile.id, 'tile to remove');
setItems(items.filter((el, i) => i !== items.indexOf(tile)));
removeFromFirestore(tile.contents);
console.log('test', items);
}
我得到Uncaught (in promise) TypeError: Cannot use 'in' operator to search for '_delegate' in undefined
其余代碼作業正常,包括setItems()上述函式中的呼叫,它洗掉瀏覽器中的專案,但隨后沒有從資料庫中洗掉。該console.log呼叫顯示正確的檔案 ID 正在傳遞給deleteDoc(). 我還確保擁有所有相關的進口產品。
uj5u.com熱心網友回復:
你正在混合async/await和.then()/.catch()。你不想這樣做。你不會對結果感到滿意。
只需將您的代碼更改為:
const removeFromFirestore = async (id) => {
const docRef = (db, 'list', id);
try {
await deleteDoc(docRef)
console.log("Entire Document has been deleted successfully.");
} catch(ex) {
console.log(ex);
}
}
稍后在您的代碼中呼叫:removeFromFirestore(tile.contents); 是tile.contents一個有效值id,這removeFromFirestore()是預期的嗎?
您可能會考慮在給 docRef 一個值之后立即執行console.log('docRef path is', docRef.path)內部removeFromFirestore()操作,以確保它是您期望的路徑。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/530732.html
標籤:Google Cloud Collective javascript反应数据库谷歌云火库
下一篇:編輯資料庫中沒有表格記錄的資料
