错误“snapshot.val”不是 Google Cloud Functions 中的函数
Posted
技术标签:
【中文标题】错误“snapshot.val”不是 Google Cloud Functions 中的函数【英文标题】:Error "snapshot.val" is not a function in Google Cloud Functions 【发布时间】:2018-10-11 14:48:13 【问题描述】:创建新节点时,我想创建相同的数据并将其推送到不同的节点。
“ins”节点是我将新数据推送到的节点:
root:
doors:
111111111111:
MACaddress: "111111111111",
inRoom: "-LBMH_8KHf_N9CvLqhzU",
ins:
// I am creating several "key: pair"s here, something like:
1525104151100: true,
1525104151183: true,
,
rooms:
-LBMH_8KHf_N9CvLqhzU:
ins:
// I want it to clone the same data here:
1525104151100: true,
1525104151183: true,
我的功能代码如下,但它根本不起作用。当我使用 onCreate 触发器(这就是我所需要的)时,我什至无法启动该功能。关于如何完成这项工作的任何想法?
exports.updateRoom = functions.database.ref('doors/MACaddress/ins')
.onCreate((snapshot, context) =>
const timestamp = snapshot.val();
const roomPushKey = functions.database.ref('doors/MACaddress/inRoom');
console.log(roomPushKey);
return snapshot.ref.parent.parent.child('rooms').child(roomPushKey).child('ins').set(timestamp);
);
注意:我修改了代码并通过将触发器更改为 onWrite 来运行它,但是像这样我收到一条错误消息:"snapshot.val" is not a函数...
exports.updateRoom = functions.database.ref('doors/MACaddress/ins').onWrite((snapshot, context) =>
const timestamp = snapshot.val();
const roomPushKey = functions.database.ref('doors/MACaddress/inRoom');
console.log(roomPushKey);
return snapshot.ref.parent.parent.child('rooms').child(roomPushKey).child('ins').set(timestamp);
);
【问题讨论】:
我做到了。我会将其标记为正确,但我的代码仍然无法正常工作。你能指出我正确地编写函数吗?我会提出一个新问题。 它仍然不能与onCreate
一起工作吗?我在下面解释了为什么它不适用于onWrite
是的...onCreate
没有运行...我已经设法根据您关于onWrite
的提示取得了一些进展。但我希望能得到更多帮助:***.com/questions/50120415/…
【参考方案1】:
如果您使用onWrite
,您必须执行以下操作:
exports.dbWrite = functions.database.ref('/path').onWrite((change, context) =>
const beforeData = change.before.val(); // data before the write
const afterData = change.after.val(); // data after the write
);
onWrite
在指定路径发生任何更改时使用,因此您可以检索before
更改和after
更改。
更多信息在这里:
https://firebase.google.com/docs/functions/beta-v1-diff#realtime-database
https://firebase.google.com/docs/reference/functions/functions.Change
在onCreate
,你可以这样做:
exports.dbCreate = functions.database.ref('/path').onCreate((snap, context) =>
const createdData = snap.val(); // data that was created
);
因为onCreate
在您向数据库添加新数据时触发。
【讨论】:
以上是关于错误“snapshot.val”不是 Google Cloud Functions 中的函数的主要内容,如果未能解决你的问题,请参考以下文章
如何遍历从 snapshot.val() 收到的数据并根据键将其推送到数组
Google App Engine 错误:获取的线程既不是原始请求线程也不是 ThreadManager 创建的线程
发布时出现“Google Play 服务正在更新”错误,而不是模拟器(Google Play 服务 12.6.73,华为设备)
Google chrome 扩展:是不是可以获得控制台输出(js 错误、console.log 等)
Google Cloud Functions - 客户端调用错误(Android Studio):FirebaseFunctionsException:响应不是有效的 JSON 对象