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)
{
}
}
では、成功メソッドが呼び出されるまで待機させてから続行するために、そこに何かを入れることができますか?
これを実行したい理由は、上記のコードがこのメソッド内にラップされているためです。
dojo.extend(esri.layers.ArcGISTiledMapServiceLayer, {
getTileUrl : function(level, row, col)
{
// blah
return url;
}
つまり、これはESRIタイルレイヤー(私のWebページのマップにタイルをロードします)であり、そのメソッドは特定のタイルのURLをすぐに返す必要があります。画像がまだデータベースにキャッシュされていない場合は、画像を読み込むためのURLになるか、これが
data:image;base64,*BASE64DATA*
ここで、 BASE64DATAは、以前にキャッシュされた場合のデータベースからのデータです。
以前はこれにlocalStorageを使用していましたが、これは同期的に機能しますが、5 MBの制限があるため、indexedDBを試してみようと思いました。