当前位置: 首页 > 知识库问答 >
问题:

Firebase云功能;无法访问fi还原数据库

秦胡媚
2023-03-14

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

函数正在部署,控制台。日志(id)正确,但每当我调用admin时。firestore()它不再打印任何内容。评论该部分打印“promise已解决”,我觉得我无法访问或使用错误的语法访问Firestore db,但我不明白为什么?

Firebase日志正在打印:

函数执行开始

tr_。。。。。。。。(id)

db调用前测试

函数执行耗时1103毫秒,完成状态代码:200

共有1个答案

邢弘业
2023-03-14

您没有正确使用update()返回的promise。在发送响应之前,您需要等待该promise得到解决。现在,您可以在不等待数据库更新完成的情况下发送响应,这意味着云函数可以在其返回后关闭所有异步工作<代码>则不会阻止您的代码。它只允许您向异步工作添加回调。您应仅在完成后发送响应:

  admin.firestore().collection('payments').doc(id).update(
    {
        status: "paid"
    }
  ).then(() => {
      console.log('success')
      res.send('ok')    // send response here
  })
 类似资料:
  • 我正试图通过谷歌云功能访问和更新我的firebase数据库,但它不起作用。 我已经编写了一个云函数,其中我已经初始化了Firebase-admin。 我必须提供service_account初始化管理。 我正在将我的firebase应用程序初始化为 我在谷歌云功能中没有我的服务帐户路径。 是否有任何方法从GOOGLE云函数访问Firebase? 谢谢

  • 谷歌云功能可以使用它们的URL公开访问,其格式如下 是否可以限制云功能的这种公共可访问性?以至于他们只能私下访问的东西。

  • 我目前正在尝试构建一个云函数,将Firestore数据导出到存储桶中。 我在Firebase文档中找到的唯一一个关于如何做到这一点的例子: 例 从这个例子来看,我似乎需要安装作为云函数的依赖项。 但是我想知道是否只能使用包访问这些方法。

  • 问题内容: 最初一切正常,我有一个类似的组件。这个 在其他档案中 到这里为止一切正常,但是当我在 它不起作用。我已经从react-redux导入了connect 问题答案: 接受为第四参数。在此选项参数中,您可以将flag设置为true。之后,您可以使用like 来访问ref的函数

  • 我在Firebase上运行一个web应用程序,从实时数据库开始,现在我正在将数据迁移到firestore。 我使用ADMINSDK迁移了除时间戳之外的所有其他数据。在我的web应用程序中,当用户上传新内容时,代码会向数据库添加时间戳,以便内容可以按时间排序。 问题在于实时数据库和firestore显然在记录时间戳时使用了不同的方法: 另一个问题是firebase.firestore.Timesta