2014-12-08 4 views
1

성공적으로 indexeddb 데이터베이스를 만들고 데이터를로드 할 수 있습니다. 같은 페이지에서이 데이터베이스의 데이터를 읽을 수도 있습니다. 그런 다음 사이트의 다른 페이지에서 데이터베이스를 읽으려고합니다.ydn.db 데이터베이스를 사용할 준비가되었는지 어떻게 확인합니까?

db = new ydn.db.Storage('test'); 
db.keys('items').done(function(d) { 
    alert(d); 
}); 

이것은 작동하지 않습니다. 나는 빈 결과를 얻는다. 그러나 위의 코드를 Chrome의 자바 스크립트 콘솔에 직접 입력하면 작동합니다. 주변을 살펴본 후 데이터베이스가 준비되지 않은 것으로 보입니다. 그래서 나는 이것을 시도한다.

그러나 이것은 콘솔에서 다음과 같은 오류가 발생합니다.

Uncaught TypeError: undefined is not a function 

다음 코드 줄에서는 오류가 표시됩니다.

db.addEventListener('ready', function() { 

여기에 무엇이 누락되어 있는지 잘 모르겠습니다.

답변

1

개방형 데이터베이스 연결은 비동기 작업입니다. 이 ready 이벤트 리스너는 데이터베이스가 연결될 때 호출되며 이후에 스키마가 변경됩니다. 이것은 데이터베이스 인스턴스에 의해 첫 번째 비동기 함수 호출 입니다.

데이터베이스 열기가 실패하면 error 이벤트 개체로 콜백이 호출됩니다. 다중 리스너를 추가 할 수 있습니다. 과도한 데이터베이스 쓰기 조작은이 준비 이벤트 핸들러 다음에 호출해야합니다. 또는 ready 이벤트는 DOM 이벤트 리스너 패턴을 통해들을 수 있습니다.

당신은 비슷한 방법으로 데이터베이스를 준비 이벤트 리스너를 추가 할 수 있습니다

var db = new ydn.db.Storage('test'); 
db.onReady(function(e) { 
    if (e) { 
    if (e.target.error) { 
     console.log('Error due to: ' + e.target.error.name + ' ' + e.target.error.message); 
    } 
    throw e; 
    } 
    db.put('statement1', large_data); 
});