0

如何在我的功能完成運行後刪除ref?有必要嗎?我希望我的功能儘可能快地運行,並且不希望「事情」堆積如山。在Firebase函數中,如何在使用後清理數據庫引用?

const functions = require('firebase-functions'); 
const admin = require('firebase-admin'); 

admin.initializeApp(functions.config().firebase); 

exports.myFunction = functions.database.ref('/path/{uid}').onWrite(event => { 
    const ref = event.data.adminRef.root.child('something').child(event.params.uid); 

    return ref.transaction(current => { 
     if (event.data.exists() && !event.data.previous.exists()) { 
     return _.toInteger(current) + _.toInteger(_.get(data, 'value', 0)); 
     } 
    }).then(() => { 
     return null; // Avoid "Error serializing return value: TypeError: Converting circular structure to JSON" 
    }); 
}); 
+1

我不確定我理解。功能完成後,是否要從數據庫中刪除'ref'處的數據? –

+0

不,我的意思是避免打開「連接」:)但我想這不是問題。 你所指的可能是某種排隊?就像 'return ref.set(data).then(()=> { return event.data.ref.remove(); });' –

回答

3

A DatabaseReference是什麼你可以「刪除」。它只是一個指向數據庫中某個位置的指針。該文件有它的頁面: https://firebase.google.com/docs/reference/admin/node/admin.database.Reference

您可以刪除/分離的唯一的事情就是你ref.on(...)設置回調,與ref.off(...),但在你的代碼中沒有回調,我認爲ref.once()應該得到這份工作在函數中大部分時間完成。

要清楚:ref.transactions()不必分離,他們只運行一次,即沒有回調。 ref.set()ref.once()相同。

+0

完美,謝謝澄清。 –

+0

@RemiSture我很高興,我的回答解決了你的問題!你也可以接受我的回答,所以其他人知道它已被回答,並且不會顯示爲「未回答」:) – creativecreatorormaybenot

相關問題