1 回答

TA貢獻1843條經驗 獲得超7個贊
您的代碼存在一些問題:
您正在使用 構建路徑
phone/${Imei}/imei
,但您的變量名是拼寫的imei
(而不是Imei
)。與大多數編程語言一樣,JavaScript 中的大小寫很重要,因此我建議密切注意拼寫和大小寫。你沒有
validate()
在任何地方打電話,這意味著你的支票沒有運行。你沒有從
validate()
. 而且由于您要返回的內容來自異步調用中的數據庫,因此您只能使用 promise 或async
/來返回它await
。這個 aslome 可以保證自己的答案,所以我建議你研究Firebase,異步檢索數據,如何使用函數中的 async-await 從異步函數返回值?以及如何從異步回調函數返回值?您確實應該使用事務來確保沒有人可以在代碼中的讀寫操作之間聲明 IMEI。
如果 IMEI 值應該是唯一的,最好將其用作鍵而不是屬性值。在此處閱讀更多信息:
結合所有這些,更好的實現可能類似于:
function save () {
var imei = document.getElementById('imei').value;
var marca = document.getElementById('marca').value;
var referencia = document.getElementById('referencia').value;
var precio = document.getElementById('precio').value;
var imeiDocRef = db.collection("phone").doc(imei);
db.runTransaction(function(transaction) {
// This code may get re-run multiple times if there are conflicts.
return transaction.get(imeiDocRef).then(function(imeiDoc) {
if (imeiDoc.exists) {
throw `IMEI '${imei}' already exist!`;
}
transaction.set(imeiDocRef, {
Imei: imei,
Marca: marca,
Referencia: referencia,
Precio: precio
});
});
}).then(function() {
console.log("Transaction successfully committed!");
document.getElementById('imei').value = '';
document.getElementById('marca').value = '';
document.getElementById('referencia').value = '';
document.getElementById('precio').value = '';
}).catch(function(error) {
console.log("Transaction failed: ", error);
});
}
添加回答
舉報