Cloud Functions - 使用全局变量
Cloud Functions - Use global variables
我的云函数设置中有一个函数 cloudFunctionCall
,每次调用云函数时都会调用该函数。
import * as functions from "firebase-functions";
const mysql = require("mysql");
function cloudFunctionCall(asyncFunc) {
return functions
.region(region)
.https.onCall(async (data: any, context: any) => {
try {
const pool = mysql.createPool(getConfig(context));
const result = await asyncFunc(data, pool);
pool.end();
res.send(result);
} catch (err) {
log("A promise failed to resolve", err);
res.status(500).send(err);
}
});
}
export const func1 = cloudFunctionCall(_func1);
export const func2 = cloudFunctionCall(_func2);
context
因此 pool
定义了调用的函数需要与哪个数据库对话,每个云函数调用可能会发生变化。现在我想避免将 pool
作为参数传递给 asyncFunc
因为函数逻辑实际上不需要它并且使函数更加冗长。
现在我的问题是:将 pool
定义为在每次云函数调用时都会更新的全局变量是否安全?
//...
let pool;
function cloudFunctionCall(asyncFunc) {
return functions
.region(region)
.https.onCall(async (data: any, context: any) => {
try {
pool = mysql.createPool(getConfig(context));
const result = await asyncFunc(data, pool);
//...
我知道每个导出的函数都托管在它自己的环境中,但是如果 func1
在不同的数据库上快速连续执行两次会怎样?是否会发生第二次调用覆盖第一次调用设置的 pool
以便后者在错误的数据库上执行?
如果是这样,是否有其他方法可以避免将 pool
作为参数传递?
云函数调用运行彼此严格隔离:每个容器一次只能执行一次。所以函数调用不可能覆盖彼此的全局值。
我的云函数设置中有一个函数 cloudFunctionCall
,每次调用云函数时都会调用该函数。
import * as functions from "firebase-functions";
const mysql = require("mysql");
function cloudFunctionCall(asyncFunc) {
return functions
.region(region)
.https.onCall(async (data: any, context: any) => {
try {
const pool = mysql.createPool(getConfig(context));
const result = await asyncFunc(data, pool);
pool.end();
res.send(result);
} catch (err) {
log("A promise failed to resolve", err);
res.status(500).send(err);
}
});
}
export const func1 = cloudFunctionCall(_func1);
export const func2 = cloudFunctionCall(_func2);
context
因此 pool
定义了调用的函数需要与哪个数据库对话,每个云函数调用可能会发生变化。现在我想避免将 pool
作为参数传递给 asyncFunc
因为函数逻辑实际上不需要它并且使函数更加冗长。
现在我的问题是:将 pool
定义为在每次云函数调用时都会更新的全局变量是否安全?
//...
let pool;
function cloudFunctionCall(asyncFunc) {
return functions
.region(region)
.https.onCall(async (data: any, context: any) => {
try {
pool = mysql.createPool(getConfig(context));
const result = await asyncFunc(data, pool);
//...
我知道每个导出的函数都托管在它自己的环境中,但是如果 func1
在不同的数据库上快速连续执行两次会怎样?是否会发生第二次调用覆盖第一次调用设置的 pool
以便后者在错误的数据库上执行?
如果是这样,是否有其他方法可以避免将 pool
作为参数传递?
云函数调用运行彼此严格隔离:每个容器一次只能执行一次。所以函数调用不可能覆盖彼此的全局值。