2012-09-14 46 views
0

我正在使用JQuery IndexedDB插件這裏可用http://nparashuram.com/jquery-indexeddb/。以下是我遍歷對象庫project_created的代碼。當我運行此代碼ss在對象存儲之前被警告task_created被迭代。但邏輯上,ss只應在對象庫task_created迭代後纔會收到警報。jquery indexeddb插件其他語句在光標迭代完成之前執行

$.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"); 
}); 
}); 

回答

1

我認爲這是因爲IndexedDB使用aynchronous API。與IndexedDB相關的所有內容都在「另一個線程」中完成,以便不會阻止的主線程(以便網站不會顯示爲固定)。

我不知道這個插件,但你應該檢查你是否可以向你的任務傳遞一個「onSuccess」函數,這樣你就可以指定任務完成後會發生什麼。

有關您正在使用的插件的更多信息,你可以隨時問他開發GitHub的頁面上:https://github.com/axemclion/jquery-indexeddb

(很抱歉,我的技術不好英語,隨時以更易懂的語言進行編輯)

+0

我讀了文檔,發現如果我想在遊標迭代完成後執行語句,我應該在.done()函數中執行。現在工作。 –

0

我寫了一個小的jQuery插件(還是很阿爾法)來緩解異步和紛繁複雜的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) 
}); 

希望你喜歡它!

相關問題