2011-08-26 3 views
0

IndexedDB와 상호 작용하는 데 사용되는 개체가 있습니다. 데이터베이스 열기가 완료되면 속성이 2로 변경 될 준비가되었습니다. this.ready == 2가 될 때까지 기다리는 read 메소드를 어떻게 알 수 있습니까?다른 속성이 준비 될 때까지 메서드를 일시 중지합니다.

var db = { 
    open: function() {//a callback sets this.ready to 2 when the database has been successfully opened}, 

    ready: 0, 

    read: function() { 
     if(!this.ready == 2) {//pause until this.ready == 2} 

     ... 
    } 
} 

100 밀리 초마다 this.ready를 확인하기 위해 setTimeout을 사용하여 함수를 작성해야합니까? 아니면 좀 더 우아한 해결책이 있습니까?

+0

도움이 될 수 있습니다. http://stackoverflow.com/questions/5346694/how-to-implement-a-lock-in-javascript – Tija

답변

0

JavaScript에서 좋은 제한 시간은 (실제로는 아마도 그 자체를 취소하는 간격)입니다. 뭔가를 기다려. 그렇지 않으면 단일 스레드 만 있기 때문에 브라우저에서 다른 모든 JS 실행을 차단하게됩니다. 다른 옵션은 상태가 2 (콜백 사용)가되면 무언가를 함수에 호출하는 것입니다.

소위 같이 접근 "대기"사용자 정의 콜백을 정의 할 수있는 객체에 getter 및 setter를 사용

var myWait = setInterval(function() { 
    if (status == 2) { 
    clearInterval(myWait); 

    myFunction(); 
    } 
}, 100); 
0

일반적으로 일시 중지는 다른 스레드에서 수행해야하지만 자바 스크립트에서는 매우 새롭기 때문에 다를 수 있습니다. 하지만 당신은 함수를 반환 할 수있는 어떤 데이터를 반환하려고 노력할 수 있습니다. function2 (function1()) function2 (function1())

0

준비가 설정되어있는 경우가로 설정되어있는 경우/경우, 다음 코드를 실행 2 read here

0

@ gddc에 동의합니다. 콜백을 사용하려면 로직을 전환해야합니다. 코드 예제에 따라 open 콜백이 이미 있습니다. 따라서 open 콜백이 완료되면 read을 호출하면 안됩니까? 그러면 스크립트에서 차단 작업을 수행 할 필요가 없습니다.

관련 문제