2013-05-30 1 views
0

나는 javascript OOP의 초보자입니다. 데이터베이스에 저장된 정보를 제공하는 API를 만들려고합니다. 나는 특별히 콜백을 사용하지 않았다.비동기 호출로 자바 스크립트 API를 만드는 방법은 무엇입니까?

내 생성자는 비동기 호출 (get_question 기능)하게 내가 내 API를 사용하고자 할 때 :

var obj = new API('id'); 
obj.get_description(); 

내 객체가 비어을 더 동기가 없기 때문에!

그럼, 내 생성자가 비동기 호출을한다는 것을 알고 이런 식으로 사용할 수있는 API를 만드는 방법은 무엇입니까? 내 SQLite 데이터베이스에 액세스 할 수 Lungo.js 프레임 워크를 사용

var API = function(question_id_algo) { 
    var id_algo = question_id_algo; 
    var self = this; 
    var question_object = null; 

    this.callback_db_init = function(data) { 
     question_object = data; 
    } 

    get_question(id_algo, self.callback_db_init); 

    this.get_description = function() { 
     if(question_object != null){ 
      return question_object.description; 
     } 
    } 
} 

그리고 내 get_question 기능

function get_question(id_algo, callback_function) 
{ 
    Lungo.Data.Sql.select('question', {id_algo: id_algo}, callback_function); 
} 

: 여기

는 내 API 클래스의 코드입니다.

+3

:

var obj = new API('id', function() { // this function runs when the API object is ready this.get_question(); }); 

코드는 다음과 같이 보일 것이다 달성하기 위해 문제? – Pointy

+0

@Pointy, 질문을 얻기 위해'get_question()'함수를 실행할 필요가 있다고 생각합니다; P –

답변

1

비동기 작업에서 동기식 결과를 가져올 수 없습니다. 여기 뭔가가 생성자 또는 접근 자 함수 중 하나 인 콜백을 사용해야합니다. (이 다를 수 있지만 정확한 프로그램 구조에 따라) 생성자에 배치하는 것은 아마도 가장 의미가 있습니다 : 정확히 무엇

var API = function(question_id_algo, constructorArgCallback) { 
    //... 
    var apiObj = this; 

    this.callback_db_init = function(data) { 
     question_object = data; 
     constructorArgCallback.call(apiObj); 
    } 

    //... 
} 
관련 문제