Мой код, который выглядит примерно так:
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 ?