我是AngularJS的新手,正在用Twitch API试验AngularJS。AngularJS - 控制器代码是逐行执行的吗?
我有一个我感兴趣的频道列表,其定义为var channels
。
然后我使用$http.get
函数来遍历另一个数组twitchList.channels
,它包含我应该调用的API地址。
(function() {
var app = angular.module('twitchList', []);
app.controller('twitchController', ['$http', function($http){
var twitchList = this;
twitchList.channels = [];
var channels = ["freecodecamp", "storbeck", "terakilobyte", "habathcx","RobotCaleb","thomasballinger","noobs2ninjas","beohoff", "MedryBW"];
for (var i = 0; i < channels.length; i++) {
twitchList.channels.push({
name: channels[i],
api: 'https://api.twitch.tv/kraken/streams/' + channels[i],
})
}
var data_list = [];
for (var j = 0; j < twitchList.channels.length; j++) {
$http.get(twitchList.channels[j].api).success(function(data){
data_list.push(data);
})
}
// Issue arises here!
console.log(data_list);
console.log(data_list.length);
}]);
})();
API调用似乎是工作完美,但是,我需要得到的API调用的结果到一个数组,称为data_list
。现在,当我打印data_list
和data_list.length
时,data_list.length
始终返回0,并且data_list
有时会填充(意味着它是0大小数组或9大小数组)。即使阵列的属性长度为9,但呼叫.length
总是给出0.
这让我觉得控制器代码不是逐行执行的吗?或者我的逻辑有问题吗?
有人可以给我一个指针吗?由于
$ HTTP是异步的,DATA_LIST不会从服务器上的数据,因此它返回0提交,你可以安慰它的$的成功回调内部HTTP –
代码执行异步data_list.push(数据) ;将在console.log后发生。 –
@shushanthp好吧,范围内有'data_list',但是你说的正确,只有在成功回调被调用之后才会推送任何数据。 – jensgram