Firebase删除+有限的查询缓存错误?

时间:2013-04-19 15:50:41

标签: firebase

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

1 个答案:

答案 0 :(得分:0)

我找不到代码的任何问题。总是存在同步返回本地缓存数据的问题,但我不认为这是一个问题;在删除完成之前,无法调用读取。它看起来像一个非常简单的错误。

我可以通过在调用添加/删除操作之前设置limit(10).on('value')来规避行为。所以我认为如果你先建立你的查询参考,你就没事了。

示例:http://jsfiddle.net/katowulf/6wQFF/2/(预加载时设置了预标签)

相关问题