#javascript #firebase #performance #google-cloud-firestore #google-cloud-functions
#javascript #firebase #Производительность #google-cloud-firestore #google-cloud-функции
Вопрос:
Я пытаюсь получить документ внутри, используя firebase-admin в облачной функции триггера в Firebase :
exports.onTransactionCreated = functions.firestore
.document("transaction/{id}")
.onCreate((snapshot, context) => {
const first = Date.now();
admin.firestore().collection('myCollection').doc(snapshot.data().myDocumentId).get()
.then((documentSnapshot) => {
const second = Date.now();
functions.logger.log(`seconds total = ${Math.floor((third - first) / 1000)}`);
}
}
Журнал консоли показывает этот результат :
seconds bw 1-2 elapsed = 140
Используемые версии :
"engines": {
"node": "12"
},
"dependencies": {
"firebase-admin": "^9.2.0",
"firebase-functions": "^3.11.0"
}
При каких обстоятельствах документ может быть таким длинным для извлечения? Даже в случае холодного запуска я не могу поверить, что это будет так долго.
Эта проблема на самом деле является большой проблемой для моего приложения, и я был бы признателен за любую помощь.
Ответ №1:
Ваша функция должна возвращать обещание, которое разрешается после завершения всей асинхронной работы. Прямо сейчас ваша функция ничего не возвращает, что означает, что она завершится, ничего не дожидаясь.
Как минимум, вы должны вернуть обещание, возвращенное get().then(...)
.
exports.onTransactionCreated = functions.firestore
.document("transaction/{id}")
.onCreate((snapshot, context) => {
const first = Date.now();
return admin.firestore().collection('myCollection').doc(snapshot.data().myDocumentId).get()
.then((documentSnapshot) => {
const second = Date.now();
functions.logger.log(`seconds total = ${Math.floor((third - first) / 1000)}`);
}
}
Пожалуйста, обратитесь к документации для получения дополнительной информации. Правильная обработка обещаний имеет решающее значение для правильной работы функций.
Комментарии:
1. Большое вам спасибо за этот ответ. В конце моего onCreate я вернул 0; и подумал, что это будет то, что нужно.