FIrebase Cloud功能:一次更新多个记录时出错

时间:2017-10-24 05:48:41

标签: javascript firebase firebase-realtime-database google-cloud-functions

我想做的事情:每当将新值添加到实时数据库中的特定节点时,我都会尝试使用云功能更新单独的节点。

更新实时数据库的代码:(有时我一次更新多个节点)使用{' 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)当我更新实时数据库中的多个节点时,我得到:

一个无限循环,云功能一直打开,应用程序崩溃。云功能不会根据需要进行所有更新。我该如何纠正这个问题?

0 个答案:

没有答案