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 作为参数传递?

云函数调用运行彼此严格隔离:每个容器一次只能执行一次。所以函数调用不可能覆盖彼此的全局值。