我使用 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 文档并尝试从重新读取中重组我的代码。
呵呵