热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Firebase的云功能:序列化Promise

如何解决《Firebase的云功能:序列化Promise》经验,为你挑选了1个好方法。

在onWrite处理程序中,我想执行多次读取,操作一些数据,然后存储它.我是Promise概念的新手.我对以下Promise处理是否安全,关于Firebase在完成之前没有查询我的查询?

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.");
        })
    });

});

以上作品,但不确定其正确的方式......



1> Frank van Pu..:

如果您的函数在返回后继续执行(或函数返回的承诺已解决),Google云端功能可能会随时中断您的代码.但是无法保证它立即这样做.

在您的代码示例中,您将返回final的结果then().由于您不从该then()块内返回任何内容,因此GCF可能会中断调用,update() 或者可能继续让代码运行的时间超过所需的时间.

要纠正这个问题,请务必从update()通话中"冒泡"承诺:

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',
        }

        return admin.database().ref().update(updKeys, function(error) {
            console.log("Updating data finished. ", error || "Success.");
        })
    });

});

在此代码中,返回的承诺update()是返回给GCF 的承诺,它为其提供了让您的函数正常运行的信息,只要它需要.


推荐阅读
author-avatar
Horizonfeng_121
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有