为什么Google Cloud Function在部署后会多次运行全局功能?

时间:2017-11-17 23:05:30

标签: javascript firebase google-cloud-functions

我设置了多个触发器,例如:

exports.doSomething = functions.firestore.document('col/{doc}').onCreate(event => {})

我有一个功能,我想在部署时立即运行。看起来像这样:

now()
function now(){
    console.log("running function")
}

我在日志中得到了这个:

enter image description here

为什么它会运行这么多次并被其他函数调用?

完整代码,只是测试它并且运行函数被调用4次,与我设置的触发器数量相同:

const functions = require('firebase-functions');
const admin = require('firebase-admin');
admin.initializeApp(functions.config().firebase);
const db = admin.firestore()
var geoip = require('geoip-lite');

exports.z = functions.firestore.document('converasdassdtIP/{UID}').onCreate(event => { })
exports.x = functions.firestore.document('sads/{UID}').onCreate(event => { })
exports.n = functions.firestore.document('asdasasdsa/{UID}').onCreate(event => { })
exports.m = functions.firestore.document('converasdasddtIP/{UID}').onCreate(event => { })

now()
function now(){
    console.log("running function")
}

1 个答案:

答案 0 :(得分:5)

云功能不提供在部署时运行一些代码的方法。您的功能显然是多次运行,并且您应该期望它在中运行甚至更多次,因为新的服务器实例与项目的负载一起被分配(和销毁)。这就是云功能扩展的方式。绝对不只有一个服务器实例处理您的所有请求。您应该期望重复运行任何全局代码。

如果要在部署后完全运行一些代码,请创建导出的函数(可能是HTTPS)并在部署后触发它。也许您可以编写一个脚本,它既可以部署代码,也可以使用curl或您选择的其他机制触发函数。