2015-04-22 46 views
2

我有vs.selectedTags這是一個包含3個對象的數組。如何迭代函數內的數組對象

在我的for循環中運行3次,我需要進行3次API調用以獲取每個對象的代碼數據,我也可以。

當我嘗試將這些代碼分配給數組中的每個vs.selectedTags[i].tickers對象時,我的問題就出現了。

它不能遍歷ApiFactory調用中的ii變成3,我必須通過使用[i-1]來阻止它錯誤出局。但i仍然停留在2,因此它總是將最後一個代碼數據保存到全部我的vs.selectedTags陣列中的項目。

var vs = $scope; 

for (var i = 0; i < vs.selectedTags.length; i++) { 

    console.log(i); 

    vs.selectedTags[i].tickers = ''; 

    console.log(vs.selectedTags[i].tickers); 

    ApiFactory.getTagData(vs.chosenTicker, vs.selectedTags[i].term_id).then(function(data) { 

     // console.log(data.data.ticker_tag); 
     console.log(data.data.ticker_tag.tickers); 

     console.log(i-1); 

     // console.log(vs.selectedTags[0]); 

     // How would you properly iterate [0 - 1 - 2] here? 
     vs.selectedTags[i-1].tickers = data.data.ticker_tag.tickers; 

     console.log(vs.selectedTags[i-1]); 
    }); 
} 

回答

1

你需要一個閉合/新範圍,爲ApiFactory.getTagData功能是異步

for (var i = 0; i < vs.selectedTags.length; i++) { 
    (function(j) { 

     vs.selectedTags[j].tickers = ''; 

     ApiFactory.getTagData(vs.chosenTicker, vs.selectedTags[j].term_id).then(function(data) { 

      vs.selectedTags[j].tickers = data.data.ticker_tag.tickers; 
     }); 
    })(i); 
} 
+0

謝謝你的工作! :D cool關閉功能 –

+1

它只需要一個函數,而IIFE是一個函數,它創建一個新的範圍。有人喜歡它,有人認爲最好是在一個單獨的函數中編寫代碼,我認爲這取決於它,如果它只是簡單的代碼在一個循環中,只是將它包裝在一個IIFE中使我更容易閱讀而不是將代碼移出。 – adeneo

1

如果你把你的東西在for循環中的一個單獨的功能,這將解決您的閉合問題。所以:

var bob = function(i){ 
    console.log(i); 

    vs.selectedTags[i].tickers = ''; 

    console.log(vs.selectedTags[i].tickers); 

    ApiFactory.getTagData(vs.chosenTicker, vs.selectedTags[i].term_id).then(function(data) { 

     // console.log(data.data.ticker_tag); 
     console.log(data.data.ticker_tag.tickers); 

     console.log(i); 

     // console.log(vs.selectedTags[0]); 

     // How would you properly iterate [0 - 1 - 2] here? 
     vs.selectedTags[i].tickers = data.data.ticker_tag.tickers; 

     console.log(vs.selectedTags[i]); 
    }); 
} 

for (var i = 0; i < vs.selectedTags.length; i++) { 
    bob(i); 
} 
+0

感謝這也可以:) :)嘆息,是啊,這可能是我最終會結束在...我喜歡@ adeneo的整潔解決方案壽 –