Firebase から値を読み取って削除した場合、その後の制限付き読み取り (例: dataRef.limit(10).once("value") ) では、削除された値が引き続き表示されます。
無制限の読み取りを行うと、削除された値は表示されず、その後の制限付き読み取りでも削除された値は表示されなくなります。
var gFirebase = new Firebase("https://brianshmrian.firebaseio.com/");
function CreateValue()
{
gFirebase.child("TestBug/Key").set("Value");
}
function ReadValue(limit)
{
var dataRef = gFirebase.child("TestBug");
if (limit)
dataRef = dataRef.limit(10);
dataRef.once("value",function(snapshot)
{
alert((limit?"Limited read\n":"Normal read\n") + snapshot.val());
});
}
function RemoveValue()
{
gFirebase.child("TestBug/Key").remove();
}
このコード例では、CreateValue()、ReadValue()、RemoveValue()、ReadValue(true) の順に実行すると、最後の ReadValue() でオブジェクトが報告されます。ただし、ReadValue(false) を実行すると、値が表示されなくなり、その後の ReadValue(true) でも値が表示されなくなります。
自分で試してみるには、こちらを参照してください: http://jsfiddle.net/brianshmrian/5WWR6/
これはバグですか?それとも私は間違いを犯していますか?
編集
わかりました、それはそれほど苦痛ではない回避策のようです。以下のコードは、今のところ私の問題を解決します。
// Need to do this before the remove to avoid caching problem
dataRef.on("value", function(snapshot)
{
setTimeout(function() { dataRef.off(); }, 3000);
});
dataRef.remove();