我的Firebase Cloud函数程序中有很多函数。但我不确定调用是如何计数的。我这样问是为了尽可能减少我的调用。
首先,我有一个功能:
export const fucntionOne = functions.auth.user().onCreate((user) => {
console.log('1 invocation used!!')
})
当一个新用户加入时,这个函数将被执行,当然它将消耗我的1调用。
所以在问这个问题之前,我做了几个实验,发现如果我使用另一个函数functionTwo
,并在第一个函数中调用它,如下所示:
export const fucntionOne = functions.auth.user().onCreate((user) => {
console.log('1 invocation used!!')
functionTwo()
})
function functionTwo(){
console.log('Second function worked. . .')
}
这一次,我期望函数调用计数为2。但它只增加了1。这很好。
但假设我使用了一个与firebase-realtime-database
有某种关系的函数,假设使用.onCreate() or .onDelete()
和so 1保存或检索数据,并调用如下函数:
export const fucntionOne = functions.auth.user().onCreate((user) => {
console.log('1 invocation used!!')
})
export const functionOnCreate = functions.database
.ref('/path')
.onCreate((snapshot, context) => {
//Do any thing in the function
console.log(`functionOnCreate executed.`)
return <something>
})
现在让我们明确一点,当使用.onCreate()
方法在数据库中使用functionOne()
创建某些节点时,会执行functionOnCreate()
。
但是,这一次它花费了我2调用好吧,我很清楚这是因为functionOnCreate()
被firebase函数调用,所以这可能是原因
但如果我通过手动调用functionTwo()
这样的函数来在数据库上执行任务。那么它会让我免于一些额外的函数调用吗?
- 调用某个云函数的次数将向您收费。在您的第二个代码片段中,您只有一个Cloud函数。此Cloud函数内部对其他常规JavaScript函数的调用不是收费操作
- 您将根据代码运行的时间以及在此期间分配的内存来收费。调用多个常规函数将增加代码运行的时间,并可能增加所需的内存
- 在
functions.auth.user().onCreate
触发的云函数中执行额外的数据库写入确实可以防止对functions.database.ref('/path').onCreate(
触发的云功能收费。不过,我建议您对调用次数进行一些计算,因为调用次数很少是其成本的主要因素