在for循环后返回一个值

时间:2012-08-20 11:30:01

标签: javascript arrays object

所以,在执行一些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);*/所在的位置,那么一切都很好,但是如果我想在函数的末尾看到对象包含的内容,我会得到一个空数组。

1 个答案:

答案 0 :(得分: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 按照上述评论者的建议改进您的代码。我通过向您展示如何同步异步调用来回答您的直接问题,但不要就此而止。