0

我是 javascript OOP 的初学者。我正在尝试制作一个 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 数据库。

4

1 回答 1

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

    //...
}
于 2013-05-30T15:18:57.480 回答