1

だから、私は過去数時間、いくつかの for ループを実行した後、関数から結果を取得しようとしてきました:

Cluster.prototype.initiate_api_data_fetching = function(username) {
var self = this,
    object = [];

return self.initiate_available_market_search(username, function(data_object){
    var json_obj = JSON.parse(data_object);
    for(var obj_key in json_obj) {
        for (var i = json_obj[obj_key].length - 1; i >= 0; i--) {
            self.initiate_market_items_data_fetching(username, json_obj[obj_key][i].site, function(data_obj){
                var json_object = JSON.parse(data_obj);
                for(var data_key in json_object) {
                    for (var j = json_object[data_key].length - 1; j >= 0; j--) {
                        object.push(json_object[data_key][j]);
                        /*log(object);*/
                    };
                };
                log(object);
            });
        };
    };
});
};

objectすべての変数やその他の読者にとって意味のないものを抽象化すると、プッシュしているデータを含む配列を返す方法を知りたいだけです。がどこにあるのかをログに記録すればすべて問題ありません/*log(object);*/が、関数の最後にオブジェクトに何が含まれているかを確認したい場合は、空の配列を取得します。

4

1 に答える 1

2

メイン関数にコールバックを追加し、完了したらそれを呼び出すことをお勧めします..

Cluster.prototype.initiate_api_data_fetching = function (username, callback) {
    var self = this,
        object = [];

    return self.initiate_available_market_search(username, function (data_object) {
        var json_obj = JSON.parse(data_object)
            , counter = 0;

        function done() {
            counter -= 1;
            if (counter === 0) {
                callback(object);
            }
        }

        for (var obj_key in json_obj) {
            if (!json_obj.hasOwnProperty(obj_key)) { continue; }

            for (var i = json_obj[obj_key].length - 1; i >= 0; i--) {
                counter += 1;
                self.initiate_market_items_data_fetching(username, json_obj[obj_key][i].site, function (data_obj) {
                    var json_object = JSON.parse(data_obj);
                    for (var data_key in json_object) {
                        if (!json_object.hasOwnProperty(data_key)) { continue; }

                        for (var j = json_object[data_key].length - 1; j >= 0; j--) {
                            object.push(json_object[data_key][j]);
                            /*log(object);*/
                        }
                    }
                    done();
                });
            }
        }
    });
};

PS。1 つの仮定は、initiate_api_data_fetching が非同期であるということです。
PS。2上記のコメント投稿者からのアドバイスに従って、コードを改善してください。非同期呼び出しを同期する方法を示すことで、あなたの差し迫った質問に答えましたが、それだけにとどまらないでください。

于 2012-08-20T11:37:47.260 に答える