2010-07-08 5 views
0

나는 HTML5 웹 데이터베이스 API를 사용하고 내가 앱이 가서을 수행 할 필요가 있는지 여부를 확인하는 기능을 가지고는 설정 단계입니다 설정 테이블에 데이터가 있는지 여부에 따라 (또는 설정 테이블이없는 경우) true 또는 false를 반환하고 싶습니다. status 변수가 설정되지 않습니다. 범위 문제 및 익명 콜백 함수 때문일 것으로 생각됩니다. 나는이 문제를 바로 잡기 위해 여기에서 클로저를 사용해야 할 것이라고 확신하지만, 제대로 할 수는 없다.HTML5 웹 데이터베이스 API를 사용하여 상태를 설정하는 방법

답변

0

내가 돌아 싶습니다 true 또는 설정 테이블에 데이터 또는하지

당신은 할 수없는 존재 여부에 따라 거짓. setupRequired() 메서드를 반환해야 할 때 설정 테이블에 데이터가 있는지 여부는 알 수 없습니다. 이것은 SQL 데이터베이스가 쿼리를 수행하고 콜백 함수를 호출 한 경우에만 알 수 있습니다. 이는 setupRequired() 이후에만 발생하며 호출 된 함수는 모두 종료되어 브라우저에 제어를 반환합니다.

executeSql()에 전달되는 콜백 함수의 전체적인 부분입니다. 이 기능은 즉시 실행되지 않으므로 return status에 도달하면 status이 (가) 처리되지 않습니다. 더구나, try...catch 블록은 내부에서 정의 된 함수가 실제로 호출 될 때까지 블록되기 때문에 콜백 함수 내에서 발생하는 예외로 인해 catch(e) 블록이 실행되지 않습니다. 따라서이 try...catch은 실제로 쓸모가 없습니다.

이것은 '비동기식'코딩입니다. 일부 코드가 함수 아래에 있기 때문에 함수가 먼저 실행된다는 의미는 아닙니다.

+0

그 말이 완벽합니다. 감사합니다. – rjlee

0

흠,이 API를 사용해 본 경험이 없지만 콜백 함수에서 값을 설정하고 외부 함수에서 해당 값을 반환하는 것으로 보입니다. 콜백이 비동기라고 가정하면이 작업은 작동하지 않습니다. 나는 당신의 가장 좋은 건처럼 뭔가 코드를 변경하는 것입니다 생각 :

this.setupRequired = function() { 
    try { 
     this.db.transaction(function(tx) { 
      tx.executeSql("SELECT * FROM settings", [], function (tx,result) { 
       if (result.rows.length == 0) { 
        doYourSetupFunction(); 
       } else { 
        //don't; 
       } 
      }, function(tx) { 
       doYourSetupFunction(); 
      }) 
     }); 
    } catch (e) { 
     doYourSetupFunction(); 
    } 
} 

그래서 setupRequired 기능을 확인하고 설정을 트리거에 대한 책임을지고있는 것을.

+0

고마워, 내가 원래 가지고 있었고 멀리 이동하려고했는데, 콜백의 비동기 성질을 말했듯이 불가능하기 때문에 다시 돌아 가야 할 것이다. – rjlee

+0

문제 없음 :) 더 나은 해결책이있을 수 있지만 나머지 코드에 대해 더 자세히 알아야합니다. 행운을 빕니다! – Jake

0

상태를 개체 또는 자신이 만든 다른 개체의 속성으로 설정할 수 있습니다.

각 단계에서 'this'가 무엇인지 또는 상태가 방화범을 사용하여 어떤 값인지 확인할 수 있습니다.

관련 문제