2012-02-09 76 views
6

indexedDB有一個spec表示您可以同步訪問索引數據庫,但尚未實現。如何同步訪問indexedDB?

我只是想知道是否有辦法讓它手動同步,

我的JavaScript看起來像這樣,

var trans = databaseAsync.transaction(["mapTile"], IDBTransaction.READ_WRITE); 
var store = trans.objectStore("mapTile"); 
var keyRange = IDBKeyRange.bound(evt.data[0], evt.data[0]); 
var cursorRequest = store.openCursor(keyRange); 

// can you put some kind of wait in here? 

cursorRequest.onsuccess = function(e) 
{ 
    var result = e.target.result; 
    if(!!result == false) 
    { 
    } 
} 

所以,你可以把東西在裏面,使其等到的onSuccess方法在繼續之前被調用?

爲什麼我想要做的,這是上面的代碼被包裝這個方法裏面的原因,

dojo.extend(esri.layers.ArcGISTiledMapServiceLayer, { 
     getTileUrl : function(level, row, col) 
     { 
      // blah 
      return url; 
     } 

所以它是一個ESRI磚層(這將加載瓷磚到地圖我的網頁上)並且該方法需要立即爲特定的tile返回url。它要麼是從,如果它沒有在數據庫緩存已經,或該加載圖像的URL,

data:image;base64,*BASE64DATA* 

BASE64DATA是從數據庫中的數據,如果以前緩存。

我以前使用localStorage爲此,它同步工作,但有一個5MB的限制,所以我想我會嘗試indexedDB。

回答

0

IE10支持sync api,但indexeddb sync api只能在web worker中使用。如果您在UI線程中工作,則需要使用異步API。

使用異步API最簡單的方法是通過承諾。

+0

請[不要將簽名或標語添加到您的帖子](http://stackoverflow.com/faq#signatures)。 – meagar 2012-08-13 16:04:11

2

IndexedDB Sync API被標記爲IndexedDB specification中的一個風險部分,並且由於潛在的缺乏實現可能會將其刪除。

我實現了使用其擔保,目前的行動開始下一個之前完成「的onComplete」交易事件「同步」的解決方案,我也使用自定義semaphore和從GUI處理異步調用queue邏輯和確保2個到IndexedDB數據庫的開放連接不會同時發生。

+1

您在這篇文章中描述的內容的代碼是否可用? – dumbmatter 2012-08-29 14:45:55