【问题标题】:Function returned undefined, expected Promise or value in Firebase cloud node function函数在 Firebase 云节点函数中返回未定义、预期的 Promise 或值
【发布时间】:2018-06-07 07:01:35
【问题描述】:

我的 firebase 函数日志中出现此错误,函数部署成功。 下面给出产生错误的代码

exports.restartAWS_Instance = functions.database.ref('stats/instances/{aws_id}')
    .onUpdate((change, context) => {
    var aws_instance = context.params.aws_id;   
    var value = change.after.val();
    if(value == 1){
        if (aws_instance === "reset_aws_premium"){
            aws.config.update({
                accessKeyId: 'XXXXXXXXXXXXXXXXXXXXX', 
                secretAccessKey: 'XXXXXXXXXXXXXXXXXXXXXXX', 
                region: 'XXXXXXXXXXXXXXXX'
            });
            var ec2 = new aws.EC2();
            var params = {
              InstanceIds: [
                'XXXXXXXXXXXXXXXXXX'
              ]
            };
            console.log("Initiating server restart for aws_premium.");
            return ec2.stopInstances(params, function(err, data) {
                if (err) console.log(err, err.stack);
                else{
                    console.log("aws_premium stopped.");
                    var at = new Date();
                    var time = at.setSeconds(at.getSeconds()+Number(45));
                    return schedule.scheduleJob("aws_premium", new Date(time), function(){
                        return ec2.startInstances(params, function(err, data) {
                            if (err) {
                                return false;
                            }
                            else{
                                schedule.cancelJob("aws_premium");
                                console.log("aws_premium started again.");
                                return true;
                            }
                        });
                    });
                }
            });
        }
    }
});

而firebase日志显示:

12:01:55.596 PM restartAWS_Instance Function returned undefined, expected Promise or value

12:01:54.126 PM restartAWS_Instance Function returned undefined, expected Promise or value

12:01:16.985 PM restartAWS_Instance aws_free started again.

12:00:26.185 PM restartAWS_Instance aws_free stopped.

12:00:15.689 PM restartAWS_Instance Error serializing return value: TypeError: Converting circular structure to JSON

12:00:15.397 PM restartAWS_Instance Initiating server restart for aws_free

我在这里做错了什么?我缺少什么退货声明?

【问题讨论】:

    标签: node.js firebase amazon-ec2 cloud google-cloud-functions


    【解决方案1】:

    Cloud Functions for Firebase 由后台事件触发必须返回一个承诺(或者在某些情况下是一个值,例如return false;)。

    我建议您观看 Firebase 团队的这组视频,其中解释了这个关键方面:

    https://www.youtube.com/watch?v=7IkUgCLr5oA&t=328s

    https://www.youtube.com/watch?v=652XeeKNHSk&t=308s

    第一个更多关于通过 HTTP 请求触发的 HTTP 函数(因此不是通过后台事件),而第二个侧重于背景事件触发的函数,但建议先看第一个,然后再看第二个一个。

    我还建议您研究一些您可以在这里找到的官方示例:https://github.com/firebase/functions-samples

    因此,更具体地说,您应该找到一种方法让 ec2.stopInstances() 方法返回一个承诺。

    【讨论】:

    • 感谢您的快速回复。将尽快检查并更新您。
    • @AkshayHiwale 你好,你有时间检查这个答案吗?
    猜你喜欢
    • 2018-06-12
    • 2019-08-06
    • 2018-12-03
    • 2019-11-03
    • 2019-08-12
    • 1970-01-01
    • 2018-12-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多