【问题标题】:Adding values through iterating child nodes通过迭代子节点添加值
【发布时间】:2017-07-01 09:51:03
【问题描述】:

还有我在node.js中的函数代码:

exports.addFunction = functions.database
    .ref('/Users/{uid}/GyroScope X-axis')
    .onWrite(event => {

var add = 0;
const addGyroX = admin.database().ref('/GyroXaddition');
const userRef = event.data.adminRef;  

userRef.once('value').then(snapshot => {
  snapshot.forEach(childrensnap => {
      var reading = childrensnap.key;
      var childData = reading.val();
      add = add+childData;
    });
  });
      return addGyroX.set(add); 
});

我的计划是只遍历它下面的 GyroScope X 轴值并添加这些值,例如在第一次迭代(图 0.004...555)和第二次迭代(0.002...645)中,添加这些值并将结果更新到不同的路径(如果存在)或创建路径并设置结果。我没有收到任何错误,但它也没有更新,它更新的是 0 而不是附加值。代码哪一部分错了?

【问题讨论】:

    标签: node.js firebase firebase-realtime-database google-cloud-functions


    【解决方案1】:

    据我所知,您每次都在设置0。加载数据后您也没有返回承诺,这意味着您的函数可能会在最终的 }); 之后的任何时候中止。

    这是一个更好的变体:

    exports.addFunction = functions.database
        .ref('/Users/{uid}/GyroScope X-axis')
        .onWrite(event => {
    
      var add = 0;
      const addGyroX = admin.database().ref('/GyroXaddition');
      const userRef = event.data.adminRef;  
    
      return userRef.once('value').then(snapshot => {
        snapshot.forEach(childrensnap => {
          var reading = childrensnap.key;
          var childData = reading.val();
          add = add+childData;
        });
        return addGyroX.set(add); 
      });
    });
    

    【讨论】:

    • 我尝试了上面修改过的代码,但没有任何更新,现在也不是 0。我迭代它正确吗?
    • 你的代码有更多问题。例如reading.val() 将返回一个字符串,因为您将值存储为字符串。调用 parseFloat(reading.val()) 将转换它。但这与 Cloud Functions 无关,也可以使用常规的 Firebase JavaScript SDK 进行复制。我建议您首先尝试在 JavaScript 页面中创建相同的功能,这样会更容易调试。一旦它在那里工作,将它移植到云函数会容易得多。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多