2013-05-30 22 views
0

我是javascript OOP的初学者。我试图让一个API来提供存储在数据库中的信息。我没有专门用来使用回调。如何使用异步调用创建JavaScript API?

我的构造使异步调用(get_question功能),所以当我想用我的API:

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

我的目标是空的,因为没有同步!

那么,如何创建一个可用的API以这种方式知道我的构造函数进行异步调用?

这里是我的API类的代码:

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); 
} 

我用Lungo.js框架来访问我的SQLite数据库。

+3

到底是什么题? – Pointy

+0

@Pointy,我想我们需要运行'get_question()'函数来得到问题; P –

回答

1

您无法从异步操作获得同步结果。这里的某些东西必须回调:构造函数或访问函数。将其放置在构造可能是最有意义的(虽然它可能会有所不同,这取决于您的具体程序结构):

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

的代码来实现,这将是这样的:

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

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

    //... 
}