如果我从 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();