gpt4 book ai didi

javascript - Firebase:Firestore 事务未定义?

转载 作者:行者123 更新时间:2023-12-02 23:59:25 25 4
gpt4 key购买 nike

我是 Firebase 新手,正在阅读文档来学习。

我目前正在使用 Firestore 而不是数据库,说实话,我不太确定每种方法的优缺点。

在他们的 reading and writing data 教程中对于数据库,他们有以下关于 transactions 的代码:

function toggleStar(postRef, uid) {
postRef.transaction(function(post) {
if (post) {
if (post.stars && post.stars[uid]) {
post.starCount--;
post.stars[uid] = null;
} else {
post.starCount++;
if (!post.stars) {
post.stars = {};
}
post.stars[uid] = true;
}
}
return post;
});
}

在这种情况下,这是为了减轻变量stars的竞争条件/损坏。

我的问题是 Firestore 相当于 transaction 例如

import firebase from 'firebase'


const postId = 1
const firestorePostRef = firebase.firestore().collection('posts').doc(postId)

// throws an error that firestorePostRef.transaction is not defined
firestorePostRef.transaction( (post) => {
if (post) {
// ...
}
})

最佳答案

Firebase Firestore 具有相同的功能。读取数据并在同一操作中写入类似以下内容:

// Create a reference to the SF doc.
var sfDocRef = db.collection("cities").doc("SF");

db.runTransaction(function(transaction) {
return transaction.get(sfDocRef).then(function(sfDoc) {
if (!sfDoc.exists) {
throw "Document does not exist!";
}

var newPopulation = sfDoc.data().population + 1;
if (newPopulation <= 1000000) {
transaction.update(sfDocRef, { population: newPopulation });
return newPopulation;
} else {
return Promise.reject("Sorry! Population is too big.");
}
});
}).then(function(newPopulation) {
console.log("Population increased to ", newPopulation);
}).catch(function(err) {
// This will be an "population is too big" error.
console.error(err);
});

相关文档在这里link

关于javascript - Firebase:Firestore 事务未定义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55240405/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com