【发布时间】:2019-12-03 09:57:20
【问题描述】:
我正在使用 Cloud Functions,并且对全局范围变量的“状态”有疑问。
我知道云函数应该是无状态的,并且为每个实例初始化全局范围的变量(不是调用)。
假设在调用期间全局变量不会被其他调用保持不变是否安全?考虑以下 sn-p:
var color = "blue" //global color variable
async function logColor (req, res) => {
var myColor = req.query.color
color = myColor
const checkColor = () => console.log(myColor === color)
await new Promise((resolve, reject) => {
var interval = setInterval(checkColor, 1000)
setTimeout(() => {
clearInterval(interval)
resolve()
}, 30000)
})
res.send()
}
正如您在调用函数时看到的那样,它读取一个颜色查询参数并将全局“颜色”变量设置为该参数,然后检查全局变量是否与本地变量相同 30 秒。
我在几个不同的选项卡中使用不同的颜色调用它,并且输出始终为“真”,所以我假设在函数调用中设置全局变量是安全的,并希望在调用期间保持它们没有来自其他调用的“并发”,只要我们不使用它们来保持调用之间的状态。
另一个假设 globalObj 在异步操作期间保持不变的示例
var globalObj
async function myFunc(req, res) {
globalObj.id = uuid()
globalObj.name = req.query.name
res.send(await asyncOperation(globalObj))
}
这是正确的还是我遗漏了什么?
【问题讨论】:
标签: javascript node.js google-cloud-functions