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 个假设是initial_api_data_fetching 是异步的。
PS。2遵循上述评论者的建议来改进您的代码。我通过向您展示如何同步异步调用来回答您的直接问题,但不要止步于此。

于 2012-08-20T11:37:47.260 回答