我的firebase-database结构如下:
我在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(childData);
});
});
});
我的计划是迭代GyroScope X轴的值,并在迭代时将值更新为新创建的路径(GyroXaddition)。我没有收到任何错误,但也没有更新。
答案 0 :(得分:0)
您提供的代码肯定无法正常工作,可能会产生大量错误。这是我注意到的一些事情:
forEach
位置不正确,需要在函数体内调用。set
正在引用来自不同范围的数据(如果您尝试迭代多个值,.set
将使用最后一个值)。event.data.adminRef
是合适的大写字母。snapshot.key
不是snapshot.key()
这个代码片段修复了一些的问题,但我不确定你要做什么才能让你一路走来。
return userRef.once('value').then(snap => {
var sets = [];
snap.forEach(childsnapshot => {
var reading = childsnapshot.key;
var childData = reading.val();
});
});
答案 1 :(得分:0)
因为您没有等待异步调用返回值。抓取数据并设置childData
时,需要的时间比平时长。使用异步编程时,多个线程将同时运行。在您的代码中,即使childData不存在,也会返回值addGyroX。因此,为了返回正确的值,请使用此代码
exports.addFunction =
functions.database .ref('/Users/{uid}/GyroScope X-axis') .onWrite(event => {
const addGyroX = admin.database().ref('/GyroXaddition');
const userRef = event.data.adminref;
userRef.once('value').then(forEach(childsnapshot => {
var reading = childsnapshot.key();
var childData = reading.val();
return addGyroX.set(childData);
})
);
});
这样,addGyroX只会在收到值时返回。