firebase云功能不更新数据

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (5)

我有firebase实时数据库,它有用户节点,并且包含许多用户我要将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请求后返回{}

这有什么问题?

提问于
用户回答回答于

这行admin.database().ref().update(data)你的参考似乎是undefined,看看文档

我不确定你的意思是保留你在顶部定义的引用

 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)

但请注意,这只是该节点的数据,如果您想使用您的方法,则不能一次更新所有数据

用户回答回答于

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.
 })
});

扫码关注云+社区

领取腾讯云代金券