承诺云功能firebase

时间:2017-11-06 19:53:58

标签: javascript firebase firebase-realtime-database promise google-cloud-functions

我对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方法获取一些额外的信息,并将其附加到数据数组中的额外键。但是现在部分,流程可能需要一段时间,因为它是一个网络请求,我该怎么做?还是已经在等了?

然后我想将数据添加到实时数据库中的新位置。完成后,我想从实时数据库中的挂起密钥中删除旧信息。

所以我的问题:进程方法需要一段时间,因为它是一个外部网络调用,代码在那里等待还是我需要一个承诺?如果是这样,我怎么能使用这个承诺?

1 个答案:

答案 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")
)