Javascript 云函数-如何只实例化一次全局函数/变量?

Javascript 云函数-如何只实例化一次全局函数/变量?,javascript,firebase,google-cloud-platform,google-cloud-functions,Javascript,Firebase,Google Cloud Platform,Google Cloud Functions,我有一个firebase应用程序,它使用云函数与Google Cloud SQL实例进行对话。这些云函数用于执行CRUD操作。我希望确保数据库反映CRUD操作,因此,每次推送新功能代码时都运行迁移代码,以确保数据库始终是最新的 我在全局函数中这样做 const functions = require('firebase-functions') const pg = require('pg') // Create if not exists database (function() {

我有一个firebase应用程序,它使用云函数与Google Cloud SQL实例进行对话。这些云函数用于执行CRUD操作。我希望确保数据库反映CRUD操作,因此,每次推送新功能代码时都运行迁移代码,以确保数据库始终是最新的

我在全局函数中这样做

const functions = require('firebase-functions')
const pg = require('pg')    

// Create if not exists database
(function() {
    console.log('create db...')
})()

exports.helloWorld = functions.https.onRequest((request, response) => {
    console.log('Hello from Firebase function log!')
    response.send('Hello from Firebase!')
})

exports.helloWorld2 = functions.https.onRequest((request, response) => {
    console.log('Hello from Firebase function log 2!')
    response.send('Hello from Firebase 2!')
})
然后,在部署时,此控制台日志将运行两次

现在我明白了,没有办法知道云功能将为这些功能提供多少实例,正如它们的文档中所述:

函数文件中的全局作用域(预期包含函数定义)在每次冷启动时执行,但如果实例已初始化,则不会执行`

如果我添加第三个函数,这个控制台日志现在在日志中显示3次,而不是2次,每个函数显示一次上传的每一个函数都有一个新的实例,这样说对吗?我试图了解上传一组云函数时会发生什么


如果是这样的话——是否没有可靠的方法在云函数中的全局函数内运行迁移代码

您所做的不是一个受支持的云功能用例。云函数代码运行以响应项目中发生的事件。部署时不存在“一次性”函数调用。如果您需要一次性运行代码,只需从您的桌面或您控制的其他服务器上运行即可


您还应该努力减少在您的职能的全局范围内发生的工作量。Globals将被实例化,并为每个在应用程序中运行函数的已分配服务器实例运行一次,因为每个函数彼此完全隔离运行,并且每个函数都有自己的所有内容副本。请观看我的视频,以便更好地了解此行为。

您所做的不是云功能的受支持用例。云函数代码运行以响应项目中发生的事件。部署时不存在“一次性”函数调用。如果您需要一次性运行代码,只需从您的桌面或您控制的其他服务器上运行即可


您还应该努力减少在您的职能的全局范围内发生的工作量。Globals将被实例化,并为每个在应用程序中运行函数的已分配服务器实例运行一次,因为每个函数彼此完全隔离运行,并且每个函数都有自己的所有内容副本。请观看我的视频,以便更好地了解这种行为。

谢谢道格,这完美地回答了我的问题。我明白我的方法肯定是一种不成熟的方式,尽管它现在解释了我的行为。我的粗体问题的答案似乎是“是”。顺便说一句,很棒的视频将会查看更多。对于应用程序中的每个函数,Globals不会被实例化一次。有关更多信息,请参见。谢谢道格,这完美地回答了我的问题。我明白我的方法肯定是一种不成熟的方式,尽管它现在解释了我的行为。我的粗体问题的答案似乎是“是”。顺便说一句,很棒的视频将会查看更多。对于应用程序中的每个函数,Globals不会被实例化一次。有关更多信息,请参见。