Функция вернула неопределенное, ожидаемое обещание или значение в облачной функции Firebase - PullRequest
0 голосов
/ 07 июня 2018

Я получаю эту ошибку в моих функциях журнала 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

Что я здесь не так делаю?Какое обратное заявление мне не хватает?

1 Ответ

0 голосов
/ 07 июня 2018

Облачные функции для 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() возвращал обещание.

...