为什么我似乎无法更新结果集。我有1000个项目,我查询Firebase并返回一个DataSnapShot数组。我想检查数组的每个元素,如果存在条件,则将“类型”更改为“ C”。我没有收到任何错误,但是更新似乎没有被应用。我这样做是在返回的诺言中进行的,但是更新被“忽略”了。
var db = admin.database();
var ref = db.ref("/calendars");
ref.once("value", function(snapshot) {
snapshot.forEach(function(data) {
var obj = data.val();
if (someconditionIsTrue) {
var objToUpdate = `calendars\\${data.key}`;
console.log(`Should update ${objToUpdate}`);
var entryRef = db.ref("/calendars").child(data.key).child('type');
entryRef.transaction(function(t) {
console.log(`TYPE: ${t}`); // DISPLAYS NULL EVEN THOUGH THERE IS A CHAR IN DB
return "C"; // Should change TYPE in the record to a "C"
});
}
也尝试只在forEach内部做一个好的设置,但这也不起作用(这就是为什么我认为我必须使用事务)。
答案 0 :(得分:0)
弗兰克回答了最好的方法:
Firebase数据库事务被比较并设置。该回调将立即以客户端对当前值的最佳猜测被调用。通常这将为空。您告诉它新值将基于什么,然后您的回调将最终以更新后的猜测值再次调用到当前值。参见stackoverflow.com/questions/33578887/…–弗兰克·范·普菲伦(Frank van Puffelen)18年11月21日在16:21