我想做的事情:每当将新值添加到实时数据库中的特定节点时,我都会尝试使用云功能更新单独的节点。
更新实时数据库的代码:(有时我一次更新多个节点)使用{' uid / managedby' :' newid'}符号。
modifyManagerBeforeDelete(newManagedBy, oldManagedBy) {
let updateVal = {};
let ref = this.afDB.database.ref('users').orderByChild('managedby').equalTo(oldManagedBy);
ref.on('value', (snapshot) => {
if (snapshot.exists()) {
let keys = Object.keys(snapshot.val());
for (let uid of keys) {
updateVal[uid + '/managedby'] = newManagedBy;
}
this.afDB.object('users').update(updateVal)
.then(() => console.log("done"))
.catch((error) => console.log(error));
}
});
}
云功能:
exports.updatemanagedby = functions.database.ref('/users/{uid}/managedby').onUpdate(event => {
if (event.data.previous.exists()) {
var earlierHandler = event.data.previous.val();
console.log("earlierHandler ", earlierHandler)
var sourceId = event.params.uid;
console.log("Current UID ", sourceId)
console.log('/managedby/' + earlierHandler + '/' + sourceId);
admin.database().ref('/managedby/' + earlierHandler + '/' + sourceId).once('value', function (snapshot) {
snapshot.ref.remove()
})
}
var newEmployee={}
newEmployee[event.params.uid] = true;
admin.database().ref('/managedby/' + event.data.val()).update(newEmployee)
.then(()=>console.log("Update Successful"))
.error((error)=>console.log(error));
})
错误:
实时数据库更新时没有错误。但是,对于云功能,我遇到两种错误:
a)当我更新实时数据库中的一个或两个记录然后触发云功能onupdate时,我得到:
TypeError:admin.database(...)ref(...)。update(...)。then(...)。错误是 不是一个功能
但云功能正常,记录也会更新。
b)当我更新实时数据库中的多个节点时,我得到:
一个无限循环,云功能一直打开,应用程序崩溃。云功能不会根据需要进行所有更新。我该如何纠正这个问题?