【发布时间】:2017-08-10 01:35:48
【问题描述】:
在 onWrite 处理程序中,我想执行多次读取,操作一些数据,然后存储它。我对 Promise 概念还很陌生。关于 Firebase 不会在我的查询完成之前终止我的查询,我对以下 Promise 处理是否安全?
exports.test = functions.database.ref('/zzz/{uid}').onWrite(event => {
console.log('zzz', event.data.val());
return Promise.all([
admin.database().ref('/zzz/1').once('value'),
admin.database().ref('/zzz/2').once('value')
]).then(function(snaps) {
console.log('loaded', snaps[0].val());
var updKeys = {
["/xxx/" +event.params.uid +"/zoo"]: 'giraffe',
}
admin.database().ref().update(updKeys, function(error) {
console.log("Updating data finished. ", error || "Success.");
})
});
});
上述方法有效,但不确定其正确方式...
【问题讨论】:
-
我很好奇你为什么要请求
/zzz/2,而你从不使用snaps[1]...? -
这只是一个测试 - 不要介意检索数据的实际(错误)使用(或使用硬编码 uid 的丑陋事实 :)
-
另请注意,您从
onWrite回调返回的承诺已解决在结束时的update完成。如果这不是故意的,您需要创建一个 Promise,从then返回它,然后在update回调中解决它。 -
@T.J.Crowder 我很想看看它是如何完成的一个例子。谢谢。
-
好吧,我无法真正回答您提出的问题(我不知道 Firebase 何时终止查询)。如果你想问一个关于 Promise 的问题,我可以回答。基本上在
then内,你会做return new Promise((resolve, reject) => { /*...your current 'then' code here...*/});并从update回调中调用resolve(或reject)。
标签: javascript firebase firebase-realtime-database google-cloud-functions