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

DatabaseReferenceは「削除」できません。これは、データベース内の場所へのポインタに過ぎません。ドキュメントはそれのためのページがあります。 https://firebase.google.com/docs/reference/admin/node/admin.database.Reference

あなたが/デタッチ削除することができます唯一の事はref.off(...)で、あなたはref.on(...)で設定したコールバックですが、そこにはコールバックがあなたのコードではありませんし、私はref.once()が仕事を得るべきだと思います関数の中でほとんどの時間行われます。

明確にするには:ref.transactions()をデタッチする必要はありません。コールバックは一度だけ実行されます。つまり、コールバックはありません。 ref.set()およびref.once()と同じです。

+0

パーフェクト、説明のためにありがとう。 –

+0

@RemiSture私はうれしいです、私の答えはあなたの質問を解決!あなたはまた私の答えを受け入れることができるので、他の人はそれが答えられていて、 "答えられていない"とは思われないことを知っています:) – creativecreatorormaybenot

関連する問題