为了更新文档,我需要执行以下操作:
1)我从名为"Loc"
2)我使用1)中的部分数据来获取名为"userInfo"
3)我使用1)和2)中的结果来更新第二个文档
我使用了 Transaction ,因为我需要这3个操作才能根据documentation一次运行所有操作。
return new Promise((res, rej) => {
var LocRef = db.collection("Loc").doc(newLocale);
db.runTransaction(function (transaction) {
return transaction.get(LocRef).then(function (doc) {
if (!doc.exists) {
throw "Document does not exist!";
}
var userInfoDocRef = userInfoRef.doc(user_id)
transaction.get(userInfoDocRef).then(function (userDoc) {
if (!userDoc.exists) {
throw "Document does not exist!";
}
var userInfoUpdate = {
"preferred_locale": newLocale,
"preferred_pair": userDoc.data().preferred_crypto_currency + doc.data().CurrencyCode,
"preferred_fiat_currency": doc.data().CurrencyCode
}
transaction.update(userInfoRef, userInfoUpdate);
var ans = {"success": true}
return ans
}).catch((e)=>{
console.log(e)
});
}).then(function (ans) {
res(ans)
}).catch(function (err) {
// This will be an "population is too big" error.
console.error(err);
rej(err)
});
})
})
但是,出现以下错误:
错误:参数“ documentRef”不是有效的DocumentReference。 无法序列化“ CollectionReference”类型的对象Firestore不支持带有自定义原型的JavaScript对象(即通过“ new”运算符创建的对象)。