首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >firebase云函数不更新数据

firebase云函数不更新数据
EN

Stack Overflow用户
提问于 2019-06-06 00:56:48
回答 3查看 439关注 0票数 0

我有一个firebase实时数据库,它有用户节点,包含许多用户,我想将用户的rating属性设置为0,对于第一个,我需要读取数据库并更新数据库。

我的功能是读取数据,但无法在浏览器上更新和返回{}

代码语言:javascript
复制
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请求之后,它返回{}

这有什么问题呢?

EN

回答 3

Stack Overflow用户

发布于 2019-06-06 01:01:43

这行admin.database().ref().update(data)你引用的似乎是undefined,看一下docs

我不确定你的意思是不是把你定义的ref放在最上面

代码语言:javascript
复制
 let user1 = admin.database().ref('users/user1/userDetails').once('value');

如果是这样的话..你必须像这样做

代码语言:javascript
复制
 let user1 = admin.database().ref('users/user1/userDetails');
  user1.once('value')

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

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

票数 0
EN

Stack Overflow用户

发布于 2019-06-06 02:06:50

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

代码语言:javascript
复制
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.
 })
});
票数 0
EN

Stack Overflow用户

发布于 2019-06-06 02:45:49

下面的代码应该可以解决这个问题:

代码语言:javascript
复制
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;
      });
      console.log(data);
      return admin
        .database()
        .ref()
        .update(data);
    })
    .then(() => {
      return res.send('done');
    })
    .catch(error => {
      return res.status(500).send(error);
    });
});
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56464919

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档