我设置了多个触发器,例如:
exports.doSomething = functions.firestore.document('col/{doc}').onCreate(event => {})
我有一个功能,我想在部署时立即运行。看起来像这样:
now()
function now(){
console.log("running function")
}
我在日志中得到了这个:
为什么它会运行这么多次并被其他函数调用?
完整代码,只是测试它并且运行函数被调用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")
}
答案 0 :(得分:5)
云功能不提供在部署时运行一些代码的方法。您的功能显然是多次运行,并且您应该期望它在中运行甚至更多次,因为新的服务器实例与项目的负载一起被分配(和销毁)。这就是云功能扩展的方式。绝对不只有一个服务器实例处理您的所有请求。您应该期望重复运行任何全局代码。
如果要在部署后完全运行一些代码,请创建导出的函数(可能是HTTPS)并在部署后触发它。也许您可以编写一个脚本,它既可以部署代码,也可以使用curl或您选择的其他机制触发函数。