所以,在执行一些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);*/
所在的位置,那么一切都很好,但是如果我想在函数的末尾看到对象包含的内容,我会得到一个空数组。
答案 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 按照上述评论者的建议改进您的代码。我通过向您展示如何同步异步调用来回答您的直接问题,但不要就此而止。