Вызов в Firestore является асинхронным, и вы должны убедиться, что вы управляете жизненным циклом вашей облачной функции для этого.
В документации говорится следующее
- Разрешение функций, выполняющих асинхронную обработку (также известную как «фоновые функции»), путем возврата обещания JavaScript.
- Завершение функций HTTP с помощью res.redirect (), res.send () или res.end ().
- Завершение синхронного функция с возвратом;заявление.
Вы можете исправить это, просто добавив оператор возврата в db.get()
.А также, чтобы избавиться от ошибки lint, вы должны вернуть значение из вашего обработчика.Вы можете либо вернуть null
, либо просто вернуть response.send()
. Опустив оператор return, неявно преобразуется в undefined
..., что, вероятно, вызывает предупреждение.
exports.queryForData = functions.https.onRequest((request, response) => {
var db = admin.firestore();
return db.get().then(snap => {
response.status(200).send({length: snap.size});
return null;
})
});
Возвращенное обещание от db.get()
гарантирует, что функция останется в живых до тех пор, пока ваш HTTP-ответ не будет отправлен, а также завершит функцию после разрешения обещания.
При неправильном завершении ваших функций они могут работать до истечения времени ожидания.Посмотрите это видео: https://youtu.be/xu5A1seU6PU?t=233