2016-08-16 2 views
1

당신 도움이 필요합니다.잡히지 않은 InvalidStateError : 'IDBRequest'에서 'result'속성을 읽지 못했습니다. 요청이 완료되지 않았습니다.

나는 indexedDB을 사용하고 있습니다. Javascript을 사용하여 DB의 테이블에서 레코드를 읽어야하지만 Chrome 브라우저에서 표시되는 오류 메시지가 표시됩니다. V52 Uncaught InvalidStateError : 'IDBRequest'에서 'result'속성을 읽지 못했습니다. 요청이 완료되지 않았습니다.

다음은 내 자바 스크립트 코드

var에 dB이다; var availableJobs = 0;

window.indexedDB = window.indexedDB || window.mozIndexedDB || window.webkitIndexedDB || window.msIndexedDB; 

    var request = window.indexedDB.open("MyDbName", 1); 

    request.onsuccess = function (event) { 
     db = request.result; 
    } 

    request.onblocked = function (event) { 
     db = "blocked..."; 
    }; 

    request.onerror = function (event) { 
     db = "Error..."; 

    }; 

    var objectStore = db.transaction("ActionCard").objectStore("ActionCard"); 

    objectStore.openCursor().onsuccess = function (event) { 
     var cursor = event.target.result; 

     if (cursor) { 
      if (cursor.value.ActionCardStatusId == 1 || cursor.value.ActionCardStatusId == 3) { 
       availableJobs++; 
      } 

      cursor.continue(); 
     } 

     $("#availableJobs").html(availableJobs); 
    } 

나는이 줄 당신은 비동기 자바 스크립트 작성하는 방법에 대해 배울 필요가

var objectStore = db.transaction("ActionCard").objectStore("ActionCard"); 
+0

변수'db'는'onsuccess' 함수에서 값을 할당하더라도 항상 null입니다. – Linda

답변

3

에 오류 메시지가 무엇입니까. db 변수는 액세스 할 때 정의되지 않았습니다.

이 작업을 수행하지 마십시오

var r = indexedDB.open(); 
var db = null; 
r.onsuccess = function(event) { db = event.target.result); } 

이를 수행

var r = indexedDB.open(); 
r.onsuccess = function(event) { 
    var db = event.target.result; 
}; 

그리고 네, 그것이 의미하는 DB가 onsuccess는 함수의 범위 밖에 사용할 수 없습니다. 범위 밖에서 사용하려고하지 않으면 문제가 발생합니다.

+0

@ Josh ... 고마워요. 효과가있다. – Linda

관련 문제