Как я могу получить доступ к indexedDB синхронно?

В 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, прежде чем продолжить on?

Причина, по которой я хочу это сделать, заключается в том, что приведенный выше код заключен в этот метод,

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

Итак, это слой тайлов ESRI (который загружает тайлы на карту на моей веб-странице), и этот метод необходимо сразу вернуть URL-адрес для определенной плитки. Это будет либо URL-адрес для загрузки изображения, если оно еще не кэшировано в базе данных, либо это

data:image;base64,*BASE64DATA*

, где BASE64DATA - это данные из базы данных, если они были ранее кэшированы.

Раньше я использовал для этого localStorage, который работает синхронно, но имеет ограничение в 5 МБ, поэтому я решил поэкспериментировать с indexedDB.

9
задан Josh 25 May 2014 в 06:10
поделиться