我有一个Firebase云功能(http请求),我想在其中更新我的Firestore数据库中的文档
const functions = require('firebase-functions')
const admin = require('firebase-admin');
admin.initializeApp();
exports.webhook = functions.https.onRequest(async (req, res) => {
const { id } = req.body
// Create payment
exports.webhook = functions.https.onRequest(async (req, res) => {
const { id } = req.body
// Create payment
try {
console.log(id)
console.log('test before db call')
admin.firestore().collection('payments').doc(id).update(
{
status: "paid"
}
).then(() => {
console.log('success')
})
console.log('test after db call')
res.send('ok')
} catch (e) {
res.send('not ok')
}
})
功能正在部署中,console.log(id)
是正确的,但是每当我调用admin.firestore()
时,它都不再打印任何内容。
评论该部分打印“承诺已解决”
我的印象是我无法访问或使用错误的语法来访问Firestore数据库,但我看不到为什么?
Firebase日志正在打印:
开始执行功能
tr _........(id)
在数据库调用之前测试
函数执行耗时1103毫秒,状态码为200
答案 0 :(得分:2)
您没有正确使用update()
返回的承诺。您需要等待该承诺得到解决,然后再发送响应。现在,您正在发送响应,而无需等待数据库更新完成,这意味着Cloud Functions可以在返回所有异步工作后将其关闭。 then
不会阻止您的代码。它只是让您向异步工作添加回调。您只应在完成后发送响应:
admin.firestore().collection('payments').doc(id).update(
{
status: "paid"
}
).then(() => {
console.log('success')
res.send('ok') // send response here
})