我在这里使用 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");
});
});
答案 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)
});
希望你喜欢它!