Правильный способ запуска функций в Firebase Cloud Functions, не дожидаясь их возврата - PullRequest
0 голосов
/ 16 мая 2018

Мой код, который выглядит примерно так:

exports.onRecordCreated = functions.database.ref('/' + postsFireRealtimeRef + '/{someId}')
    .onCreate((snap, context) => {
        return someFunctionReturningAPromise(someParameter);
    }).then(someParameter => {
        return someFunctionReturningAPromise(someParameter);
    }).then(someParameter => {
        return someFunctionReturningAPromise(someParameter);
    }).then(someParameter => {
        return someFunctionReturningAPromise(someParameter);
    });

Я полагаю, что эта реализация следует руководству разработчика , объединяя все асинхронные операции и возвращая обещание.Однако проблема в этом подходе заключается в том, что я не хочу ждать завершения этих someFunctionReturningAPromise(..) функций (в основном потому, что они занимают слишком много времени, и у меня есть пользователь, чтобы вернуться к нему в потоке интерфейса).Я бы лучше отправил эти функции на их пути, чтобы сделать свое дело и вернуть решительное обещание.

Итак, я бы сделал что-то вроде этого:

exports.onRecordCreated = functions.database.ref('/' + postsFireRealtimeRef + '/{someId}')
    .onCreate((snap, context) => {
        doWork();
        return true  // Tell front end that the server was reached ok with the record being created, but don't wait for all asynchronous operations to complete
    });

function doWork() {
    return someFunctionReturningAPromise(someParameter)
        .then(someParameter => {
            return someFunctionReturningAPromise(someParameter);
        }).then(someParameter => {
            return someFunctionReturningAPromise(someParameter);
        }).then(someParameter => {
            return someFunctionReturningAPromise(someParameter);
        });
}

С этим решением Я обеспокоен тем, что экземпляр Firebase отключит мою 'мошенническую' функцию .Я не знаю, смогу ли я получить какую-либо гарантию того, что функция doWork() будет разрешена для запуска, в соответствии с Firebase:

Правильно завершив функции ... можно убедиться, что CloudЭкземпляр функций, выполняющий вашу функцию, не завершает работу, пока ваша функция не достигнет своего завершающего состояния или состояния.

Как правильно запускать такие независимые функции в верхней части облаков Firebase?Должен ли я обернуть doWork() в отдельную функцию HTTP ?

1 Ответ

0 голосов
/ 16 мая 2018

Если ваша функция возвращается, не дожидаясь завершения всех своих обещаний, есть очень хороший шанс, что все они будут закрыты до того, как они завершатся.

Если вам нужно больше времени для выполнения работы в функции, увеличьте ее время ожидания в Облачная консоль для вашего проекта, max составляет 9 минут . Если вам нужно больше 9 минут, вам следует разделить работу и запустить ее с помощью триггера pub / sub.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...