2012-02-09 5 views
6

indexedDB에는 spec이 있으며 인덱싱 된 데이터베이스에 동 기적으로 액세스 할 수 있지만 아직 구현되지 않았 음을 나타냅니다.indexedDB를 동 기적으로 액세스하려면 어떻게합니까?

가 수동으로 동기화 할 수있는 방법이 있다면 난 그냥 궁금 해서요,

내 자바 스크립트는 다음과 같습니다

,

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 것 중 하나 이전에 캐시 된 경우 BASE64DATA 데이터베이스에서 데이터입니다

data:image;base64,*BASE64DATA* 

.

이전에 localStorage를 사용하여 동 기적으로 작동했지만 5MB의 제한이 있으므로 indexedDB를 실험해볼 것이라고 생각했습니다.

답변

0

IE10은 sync API를 지원하지만 indexeddb sync api는 웹 작업자에서만 사용할 수 있습니다. UI 스레드에서 작업하는 경우 비동기 API를 사용해야합니다.

비동기 API를 사용하는 가장 쉬운 방법은 약속입니다.

+0

[게시물에 서명 또는 태그 라인을 추가하지 마십시오.] (http://stackoverflow.com/faq#signatures). – meagar

2

IndexedDB Sync API는 IndexedDB specification의 위험한 부분으로 표시되어 있으며 구현이 부족할 수 있으므로 제거 될 수 있습니다.

내가 현재 작업이 다음 일을 시작하기 전에 완료되었음을 보증을 '의 onComplete'거래 이벤트를 사용하여 '동기화'솔루션을 구현했습니다, 나는 또한 사용자 semaphore 및 GUI에서 비동기 호출을 처리 queue 논리를 사용하고 IndexedDB 데이터베이스에 대한 2 개의 열린 연결이 동시에 발생하지 않도록합니다.

+1

이 게시물에 설명 된 내용의 코드는 어디서나 구할 수 있습니까? – dumbmatter

관련 문제