Я полагаю, что ваша проблема, вероятно, связана с тем, что вы используете асинхронную команду, к тому времени, когда ваша .get()
будет полностью оценена, ваш response.send(<NOT_IMPORTANT>)
уже сработал и закрыл это требование.
Вам необходимо удалить response.send(<NOT_IMPORTANT>);
в конце вашей функции.Дайте .get()
время выполнения запроса.
Также относится к теме ... Хотя ваша база данных мала, это, вероятно, не проблема ... но я рекомендую вам следовать рекомендациям, чтобы убедиться, чтоу вашей облачной функции достаточно времени, чтобы запустить , вернув свое обещание.Эти документы включают в себя объяснение:
Возвращая результат .set()
, ваша функция гарантированно будет работать до тех пор, пока асинхронная работа по записи строки в базу данных не будет полностью завершена
exports.hello = functions.database.ref('/hello').onWrite(event => {
// set() returns a promise. We keep the function alive by returning it.
return event.data.ref.set('world!').then(() => {
console.log('Write succeeded!');
});
});
Итак, я предлагаю следующее:
exports.login = functions.https.onRequest((request, response) => {
response.set('Access-Control-Allow-Headers', 'Content-Type');
let query = admin.firestore().collection("admin").where("username", "==", request.body.username);
return query.get().then(snapshot => {
let loginStatus = false;
if (snapshot.length > 0) loginStatus= true;
response.send(loginStatus);
}).catch(err => {
console.log(err);
});
})