来自Google Cloud Functions的实时数据库的原子更新



我使用 Google Cloud Functions 为我的用户创建一个 API 端点,以便与实时数据库进行交互。

遇到的问题是我不确定代码是如何工作的。我有一个帮助程序函数doSomething我只需要调用一次,但我怀疑在某些情况下可以调用两次或更多(当多个用户同时调用 API 并且更新操作尚未由数据库处理时)。可能吗?这是否意味着我需要使用transaction方法?谢谢!


数据库结构

{
  somePath: {
    someSubPath: null
  }
}

谷歌云函数代码

const functions = require('firebase-functions')
const admin = require('firebase-admin')
const cors = require('cors')({origin: true});
admin.initializeApp(functions.config().firebase)
// API ENDPOINT
exports.test = functions.https.onRequest((req, res) => {
  cors(req, res, () => {
    admin.database().ref('/somePath/someSubPath').once('value')
      .then(snapshot => {
        const value = snapshot.val()
        if (value) return res.status(400).send({ message: 'doSomethingAlreadyCalled' })
        doSomething()
        const updates = { '/somePath/someSubPath': true }
        return admin.database().ref().update(updates)
          .then(() => res.status(200).send({ message: 'OK' }))
      })
      .catch(error => res.status(400).send({ message: 'updateError' }))
  })
})
// HELPERS
const doSomething = () => {
  // needs to be called only once
}
我相信

您被否决了,因为上述伪代码没有完全意义,并且您的问题中没有您的代码实际执行的操作的日志或输出。没有完整的图片使我们很难为您提供帮助。

仅从问题中的结构来看,由于函数提升,您的实际代码可能会调用两次。每当我遇到此问题时,我都会回到 api 文档并尝试从重新读取中重组我的代码。

相关内容

  • 没有找到相关文章

最新更新