У indexedDB есть spec , говорящий, что вы можете получить доступ к индексированной базе данных синхронно, но она еще не реализована.
Мне просто интересно, есть ли способ сделатьсинхронно вручную,
Мой 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 (который будет загружать листы на карту на моей веб-странице)и этот метод должен возвращать URL-адрес сразу для конкретной плитки.Это будет либо URL-адрес для загрузки изображения, если он еще не кэширован в базе данных, либо
data:image;base64,*BASE64DATA*
, где BASE64DATA - это данные из базы данных, если ранееcached.
Ранее я использовал для этого localStorage, который работает синхронно, но имеет ограничение в 5 МБ, поэтому я решил поэкспериментировать с indexedDB.