Firebase 在云函数内运行云Firestore事务

Firebase 在云函数内运行云Firestore事务,firebase,google-cloud-functions,google-cloud-firestore,Firebase,Google Cloud Functions,Google Cloud Firestore,如何将event.data.data()中的数据作为读取值传递到事务中 exports.runMyTransaction=functions.firestore .doc('/myCollection/{myId}')。onWrite((事件)=>{ //在这个事务中,我希望传递事件而不是cityRef var transaction=db.runTransaction(t=>{ 返回t.get(cityRef) 。然后(doc=>{ //文档应该包含事件对象 var newPopulation

如何将
event.data.data()
中的数据作为读取值传递到事务中

exports.runMyTransaction=functions.firestore
.doc('/myCollection/{myId}')。onWrite((事件)=>{
//在这个事务中,我希望传递事件而不是cityRef
var transaction=db.runTransaction(t=>{
返回t.get(cityRef)
。然后(doc=>{
//文档应该包含事件对象
var newPopulation=doc.data().population+1;
t、 更新(cityRef,{population:newPopulation});
});
});
});
您不能将自己的“当前值”传递到事务中。但是,由于云函数只有在提交数据后才会触发,因此在事务中获取数据应该在低争用性文档中为您提供相同的值

事实上:如果它没有给出相同的值,那是因为其他人已经再次更改了文档。在这种情况下,这就是为什么你不能传递你自己的“这是当前值”

这听起来有点像是一场灾难。您能否更新您的问题,以说明您正试图完成的任务,以及可能出现问题的代码?

您不能将自己的“当前值”传递到事务中。但是,由于云函数只有在提交数据后才会触发,因此在事务中获取数据应该在低争用性文档中为您提供相同的值

事实上:如果它没有给出相同的值,那是因为其他人已经再次更改了文档。在这种情况下,这就是为什么你不能传递你自己的“这是当前值”


这听起来有点像是一场灾难。您是否可以更新您的问题,以说明您正试图完成的任务,以及可能出现问题的代码?

您可能需要添加更多关于您正试图完成的任务的详细信息。也可能是一些你正在使用的代码。你可能想添加一些关于你到底想要完成什么的详细信息。也可能是您正在使用的一些代码。我试图避免额外读取的延迟,因为值已经传递到函数中。如果这是唯一的解决办法的话,我可以很容易地再次得到它。是的,我想了很多。由于Firebase RTDB和Cloud Firestore事务是一种比较和设置操作,因此设置您自己的初始猜测实际上没有危险。虽然我不认为往返在云功能的上下文中有多大关系,但在上提交一个功能请求可能是值得的,只是为了看看其他人如何响应。进一步考虑,如果事务必须重试,因为另一个用户正在向文档写入,那么最好每次都获得文档的“最新”版本。然而,在事务尝试处理的第二次或第三次时,事件数据可能已过时。我试图避免额外读取的延迟,因为值已经传递到函数中。如果这是唯一的解决办法的话,我可以很容易地再次得到它。是的,我想了很多。由于Firebase RTDB和Cloud Firestore事务是一种比较和设置操作,因此设置您自己的初始猜测实际上没有危险。虽然我不认为往返在云功能的上下文中有多大关系,但在上提交一个功能请求可能是值得的,只是为了看看其他人如何响应。进一步考虑,如果事务必须重试,因为另一个用户正在向文档写入,那么最好每次都获得文档的“最新”版本。然而,在事务尝试处理的第二次或第三次时,事件数据可能已过时。