jquery indexeddb plugin其他语句在游标迭代完成之前执行

时间:2012-09-14 00:13:10

标签: indexeddb

我在这里使用 JQuery IndexedDB插件 http://nparashuram.com/jquery-indexeddb/。以下是我遍历objectstore project_created 的代码。当我运行此代码时, ss 会在迭代objectstore task_created 之前收到警报。但从逻辑上讲,只有在迭代了objectstore task_created 之后,才会提醒 ss

$.indexedDB("sl_task_tracker").objectStore("project_created").each(function(elem){
        var count_tasks=0;
        $.indexedDB("sl_task_tracker").objectStore("task_created").each(function(item){
            if(item.value.project_id==elem.key)
                count_tasks++;
        });

        alert("ss");
});
});

2 个答案:

答案 0 :(得分:1)

我相信这是因为IndexedDB使用aynchronous API。与IndexedDB相关的所有内容都在“另一个线程”中完成,以便不阻塞主线程(这样网站似乎不会被修复)。

我不知道这个插件,但您应该检查是否可以将“onSuccess”功能传递给您的任务,这样您就可以指定任务完成后会发生什么。

有关您正在使用的插件的更多信息,您可以随时在他的github页面上询问开发人员:https://github.com/axemclion/jquery-indexeddb

(抱歉我的技术英语不好,可以用更容易理解的语言编辑)

答案 1 :(得分:0)

我写了一个小的jquery插件(仍然非常alpha)来缓解异步和其他令人困惑的API:

https://github.com/ameyms/jquery-indexeddb

我试图让API变得非常简单:

//Define and initialize an IndexedDB ...
var db = $.idb({
                    name:'foobar', 
                    version: 2,
                    drop: stores_to_be_deleted,
                    stores:list_of_stores
                });

// ... Add objects to a store
db.put(items, 'into_store').done(onsuccess);

//.. And delete objects from a store
db.remove('from_store', conditionFunc).done(onremoval);

//.. And not to forget fetching objects from a store
db.select('from_my_store', conditionFunc).done(function (items){

    console.log(items)
});

希望你喜欢它!