【问题标题】:Firebase Handle Async FunctionFirebase 处理异步函数
【发布时间】:2018-12-12 10:01:36
【问题描述】:

我有一个 firebase 函数,如下所示:

exports.myFunction = functions.database.ref('/users/{id}/').onWrite((snapshot, context) => {

//do some processing here

var number;
snapshot.after.ref.parent.once('value').then((newSnapshot) => {
    number = newSnapshot.child('number').val();
});
console.log(number);

//do some processing with the use of var number

//returning the updates after processing
return snapshot.after.ref.update(updates);
});

我意识到变量 number 是未定义的,因为我用来获取 number 值的函数正在异步运行。但是,我想不出一种方法来转换此实现,使其按我想要的方式工作。任何帮助将不胜感激。

【问题讨论】:

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


    【解决方案1】:

    您可以链接一个新的 .then() 来对该号码执行处理。例如:

    exports.myFunction = functions.database.ref('/users/{id}/').onWrite((snapshot, context) => {
    
    ...
    var number;
    return snapshot.after.ref.parent.once('value').then((newSnapshot) => {
            number = newSnapshot.child('number').val();
        }).then((number) => {
            console.log(number);
            //do some processing with the use of var number
            snapshot.after.ref.update(updates);
        });
    });
    

    【讨论】:

    • 它应该像这样工作,还是我错了? :snapshot.after.ref.parent.once('value').then(newSnapshot => { number = newSnapshot.child('number').val(); console.log(number); //do some processing with the use of var number });
    • 在这些情况下如何处理最后的return语句?返回的更新取决于使用 var number 完成的处理。
    • 您可以退回整个链条。请参阅我的更新答案。
    猜你喜欢
    • 1970-01-01
    • 2012-07-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-17
    • 2019-01-13
    • 2018-07-21
    • 1970-01-01
    相关资源
    最近更新 更多