我对Firebase的云功能承诺有些困难。 我有这段代码:
exports.wantsToGoOnline = functions.database
.ref('/groups/{groupId}/member_status/pending/{deviceId}')
.onCreate(event => {
const data = event.data.val();
data.extra = process(event.params.deviceId);
const p = event.data.ref.parent.parent.child("online").child(event.params.deviceId).set(data)
return Promise.all([p]).then(function(snaps) {
return event.data.ref.parent.parent.child("pending").child(event.params.deviceId).set({})
})
})
我等到设备附加在待处理的"键"中。我将所有数据复制到数据常量。然后我调用process方法获取一些额外的信息,并将其附加到数据数组中的额外键。但是现在部分,流程可能需要一段时间,因为它是一个网络请求,我该怎么做?还是已经在等了?
然后我想将数据添加到实时数据库中的新位置。完成后,我想从实时数据库中的挂起密钥中删除旧信息。
所以我的问题:进程方法需要一段时间,因为它是一个外部网络调用,代码在那里等待还是我需要一个承诺?如果是这样,我怎么能使用这个承诺?
答案 0 :(得分:0)
让我将您的等待代码放入Promise的简单方法
exports.wantsToGoOnline = functions.database
.ref('/groups/{groupId}/member_status/pending/{deviceId}')
.onCreate(event => {
return new Promise (
(resolve, reject) =>{
change.after.ref.parent.once('value').then(snapshot=>{
..
if(success)
resolve("good")
else
reject("its not good")
)