2012-02-09 5 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; 
     } 

だから、それは(私のWebページ上の地図上にタイルをロードします)ESRIタイル層であり、そのメソッドは特定のタイルのURLをすぐに返す必要があります。それは既にデータベースにキャッシュされ、またはこのされていない場合から画像をロードするためのURLのどちらかになります以前にキャッシュされた場合BASE64DATAは、データベースからのデータである

data:image;base64,*BASE64DATA* 

私はこれまでにlocalStorageを使用していましたが、これは同期的に動作しますが、5MBの制限がありますので、indexedDBを試してみると思いました。

答えて

0

IE10は同期APIをサポートしていますが、indexeddb同期APIはWebワーカー内でのみ使用できます。 UIスレッドで作業している場合は、非同期APIを使用する必要があります。

非同期APIを使用する最も簡単な方法は、約束によるものです。

+0

あなたの投稿に署名やタグラインを追加しないでください(http://stackoverflow.com/faq#signatures)。 – meagar

2

IndexedDB Sync APIはIndexedDB specificationの危険な部分としてマークされており、実装されていない可能性があるため削除される可能性があります。

私は 'oncomplete'トランザクションイベントを使用して、現在のアクションが次のイベントを開始する前に終了することを保証して実装しました。また、GUIからの非同期呼び出しを処理するカスタムsemaphorequeueロジックも使用します。 IndexedDBデータベースに対する2つのオープンな接続が同時に行われないようにします。

+1

この記事で説明したコードはどこから入手できますか? – dumbmatter

2

これを行うためのエレガントな方法は、the accepted answer to this question I asked a couple months agoです。残念ながら、これはFirefox 1.7でサポートされているJavaScript 1.7(ジェネレータ)の機能に依存しています。うまくいけば、このテクニックはもっと幅広くサポートされることでしょう。

関連する問題