Firebase云功能不更新数据

时间:2019-06-05 16:56:48

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

我有一个Firebase实时数据库,该数据库具有用户节点并包含许多用户,因此我想将user的rating属性设置为0,为此首先我需要读取数据库并更新数据库。

我的函数正在读取数据,但无法在浏览器上更新并返回{}

exports.quarter = functions.https.onRequest((req, res) => {
 let user1 = admin.database().ref('users/user1/userDetails').once('value');
 let user2 = admin.database().ref('users/user2/userDetails').once('value');
 let user3 = admin.database().ref('users/user3/userDetails').once('value');
 let user4 = admin.database().ref('users/user4/userDetails').once('value');
  Promise.all([user1, user2, user3, user4])
      .then(result => {
    let data = {};
     result[0].forEach(action => {
         data['users/user1/userDetails/' + action.key + '/' + 'Rating'] = 0;
     });
     result[1].forEach(action => {
         data['users/user2/userDetails/' + action.key + '/' + 'Rating'] = 0;
     });
    result[2].forEach(action => {
        data['users/user3/userDetails/' + action.key + '/' + 'Rating'] = 0;
    });
    result[3].forEach(action => {
        data['users/user4/userDetails/' + action.key + '/' + 'Rating'] = 0;
    });
     return data;

}).then(data => {
      console.log(data);
     return  admin.database().ref().update(data);

 }).then(data => {
     return res.send('done');

 }).catch(error => {
    return res.status(500).send(error);
 })
});

我可以看到console.log(data)的结果,但是该函数没有更新,最后执行get请求后,它返回了{}

这有什么问题?

3 个答案:

答案 0 :(得分:0)

此行admin.database().ref().update(data)似乎是您的参考undefined,请看一下docs

我不确定您的意思是否意味着将定义的引用保留在顶部

 let user1 = admin.database().ref('users/user1/userDetails').once('value');

如果是这种情况..您必须输​​入

 let user1 = admin.database().ref('users/user1/userDetails');
  user1.once('value')

 // and down where you want to update
 user1.update.(data)

但是请注意,这只是该节点的数据,如果要使用此方法,则无法一次全部更新

答案 1 :(得分:0)

Promise.all()将在传递给它的任何诺言完成之前返回。这意味着data将是一个具有原始定义的空对象,并且该值将立即返回。相反,您应该让以下then回调处理每个结果:

exports.quarter = functions.https.onRequest((req, res) => {
 let user1 = admin.database().ref('users/user1/userDetails').once('value');
 let user2 = admin.database().ref('users/user2/userDetails').once('value');
 let user3 = admin.database().ref('users/user3/userDetails').once('value');
 let user4 = admin.database().ref('users/user4/userDetails').once('value');
 return Promise.all([user1, user2, user3, user4]);
}).then(data => {
  // data will be an array of all the results. Handle them here.
 })
});

答案 2 :(得分:0)

以下应该可以解决问题:

function SimpleCable(X, Y, totalradius, outerradius, innerradius, Type, name) {
  this.Center = [X, Y];
  this.TotalRadius = totalradius;
  this.ConductorOuterRadiusList = outerradius;
  this.ConductorInnerRadiusList = innerradius;
  this.Type = Type;
  this.Name = name;
}