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);
});
}
添加回答
举报