我遇到了對Firebase函數事件缺乏理解的情況。爲了使我的功能按預期工作,我爲參考路徑增加了更多的特殊性,然後我認爲這是必需的。Firebase函數onCreate()onDelete()路徑特異性
例如,我想增加或孩子被添加到或從該路徑刪除每次計數遞減:
/invites
我用這些作爲我的功能來實現:
functions.database.ref('/invites').onCreate(event => {
return admin.database().ref('/counter').transaction((current) => {
return (current || 0) + 1;
})
});
functions.database.ref('/invites').onDelete(event => {
return admin.database().ref('/counter').transaction((current) => {
if (current >=1) return (current - 1);
else return;
})
});
This是我根據我的路徑:
:如果您設置的路徑爲你的功能/富/酒吧,它在這兩個位置的匹配事件路徑規範匹配所有觸及路徑的寫入,包括髮生在其下的任何寫入。
/富/酒吧
/富/酒吧/巴茲/真的/深/路徑
在我的情況下,/invites
將等於該例子中的/bar
。
但是,上述功能只會觸發第一個孩子被添加到/invites
以及最後一個孩子被刪除。在這兩種情況之外,其他任何事情都不會觸發計數器功能。我已經能夠使這項工作的唯一方法是通過使用這個作爲我的路徑:
invites/{idOfInvite}
雖然我知道這會工作,我不知道,這正是我需要的。稍後我可能會決定在某個{idOfInvite}
的路徑下添加新的數據,這會導致我的計數器函數觸發(我認爲?)。
這個SO answer表示我的函數的行爲是預期的,但這不是我期望基於我對文檔的理解。也許我錯誤地解釋了文檔?
正如你所看到的,我對這些添加/刪除事件如何觸發的理解有些偏離。