Firebase云功能;无法访问Firestore数据库

时间:2019-06-04 20:46:09

标签: node.js firebase google-cloud-functions firebase-admin

我有一个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

1 个答案:

答案 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
  })