我是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