我正试图通过在firebase:中的触发云函数中使用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"
}
在什么情况下,一份文件可以这么长才能检索?即使是在冷启动的情况下,我也不敢相信它会这么长。这个问题实际上是我的应用程序的一大痛点,任何帮助都将不胜感激。
您的函数需要返回一个promise,该promise在所有异步工作完成后解析。现在,您的函数不返回任何内容,这意味着它将在不等待任何内容的情况下终止。
至少,您应该返回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)}`);
}
}
有关详细信息,请参阅文档。正确处理承诺对于使功能正常工作至关重要。