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 に答える