В 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.