2011-11-10 2 views
0

안녕하세요, 저는 HTML5 데이터베이스 API를 방금 들여다 보았고 결과를 함수에서 반환하는 데 문제가 있습니다. 여기에 내가 가진 것이있다.자바 스크립트 데이터베이스 API 반환 결과

var list = GetScenarios(); 

GetScenarios: function() 
{ 

var scenarios; 

// get all the scenarios 
conn.transaction(function(_t) { 

_t.executeSql('SELECT * FROM scenarios', [], function(_tr, _result) { 

     scenarios = _result.rows; 

    }); 
}); 

return scenarios; 

} 

데이터베이스에서 행을 가져올 수 있지만 행은 변수 시나리오에 할당되지 않습니다. 그 범위의 일을 알고 있지만 GetScenatios 함수에서 결과를 반환하는 방법을 생각할 수 없습니다.

_result.rows를 기록 할 때 데이터가 있지만 시나리오는 항상 정의되지 않습니다.

의견이 있으십니까?

다음은 내 js 파일의 설정입니다.

window.MyExtension = (function() 
{ 

    return ({ 

    OtherMethod: function() { 


     var list = window.MyExtension.GetScenarios(); 

    }, 

    GetScenarios: function() { 

     ...see above 

    } 

}()); 
+0

귀하의 코드가 잘못 자바 스크립트입니다. 'GetScenarios : function()'은'function GetScenarios()'이어야합니다. 그것은'GetScenarios = function()'일 수 있지만'var list = GetScenarios();'앞에 나타나야합니다. – gilly3

+0

@ gilly3, 정확한, 마지막 발언 제외 : http://jsfiddle.net/FvdbT/ – stivlo

+0

@stivlo - 아마도 내 의견을 잘못 읽었을 것입니다. jsFiddle에 의해 입증 된'function GetScenarios()'함수가 작동합니다. 그러나 다음과 같이 GetScenarios = function()은 그렇지 않습니다. http://jsfiddle.net/FvdbT/1/ – gilly3

답변

1

동기식 인 것처럼 비동기식 요청에서 코드를 반환하려는 것 같습니다.

function GetScenarios(callback) { 
    conn.transaction(function(_t) { 
     _t.executeSql('...', [], function(_tr, _result) { 
      callback(_result.rows); 
     }); 
    }); 
} 

를 그리고에서 호출 코드를 변경 : 당신은 GetScenarios()에 콜백 매개 변수를 추가 할 필요가

var list = GetScenarios(); 
// do something with list 

는이 방법 :

GetScenarios(function (list) { 
    // do something with list 
}); 
+0

퍼펙 토! 정말 고맙습니다. 또한 개체 내에서 window.MyExtension.GetScenario()를 사용해야합니다. 감사합니다 힙 – hooligan