2015-06-27 44 views
1

我想構建一個對象數組,但對於每個對象,我需要多個鏈接的http調用。例如:如何通過在AngularJS中鏈接http調用來構建對象數組?

var objects = []; 
$http.get(/getDataUrl) 
.then(function(data){ 
    for(i = 0; i < data.length; i++) 
    { 
     objects[i] = { value1 : data.value } 
    } 
    for(i = 0; i < objects.length; i++) 
    { 
     http.get(objects[i].value1) 
     .then(function(data){ 
      objects[i].value2 = data.value; 
     } 
    } 
}) 

任何想法如何正確執行這個混亂?

+1

您的解決方案無法正常工作?由於您提供了很少的信息,我認爲它應該可以工作 – aorfevre

+0

我沒有訪問當前計數器值'i'的鏈接調用。 – user3816378

+0

我認爲你正在得到這種情況 - 我總是指向最後一個索引? – akashrajkn

回答

2

您將始終將'i'值作爲最終索引,因爲渲染器將在ajax請求給出200時打印它,這將需要一些時間。而在這短短的時間,for循環會被執行,因此你總是會獲得的「我」

爲了解決這個值的最後一個索引,你將不得不使用,closure inside loops

修改您的代碼如下,

var objects = []; 
$http.get(/getDataUrl) 
.success(function(data){ 
    for(i = 0; i < data.length; i++) 
    { 
     objects[i] = { value1 : data.value } 
    } 
    for(i = 0; i < objects.length; i++) 
    { 
     (function(index) { 
      var currentURL = objects[i].value1; 

      $http.get(currentURL) 
      .success(function(data) { 

       // both currentURL and i value can be accessed here 
       console.log(currentURL); 
       console.log(index); // i value = index 

       objects[index].value2 = data.value; 
      }); 
     })(i); 
    } 
}) 

現在您可以訪問匿名函數中的索引。希望這可以幫助

0

你可以嘗試使用成功,而不是的話,爲$ HTTP是不是一個標準的承諾:

var objects = []; 
$http.get('/getDataUrl') 
.success(function(data){ 
    for(i = 0; i < data.length; i++) 
    { 
     objects[i] = { value1 : data.value } 
    } 
    for(i = 0; i < objects.length; i++) 
    { 
     http.get(objects[i].value1) 
     .success(function(data2){ 
      objects[i].value2 = data2.value; 
     } 
    } 
}) 
0

嘗試類似的東西: 只有一個迴路,按規定,所有的;)

$http.get(/getDataUrl) 
.then(function(data){ 
    for(i = 0; i < data.length; i++) 
    { 
     objects[i] = { value1 : data.value } 


     $http.get(objects[i].value1) 
     .then(function(data){ 
      objects[i].value2 = data.value; 
     } 
    } 

}) 
相關問題