2017-09-26 134 views
0

我遇到了我收到的Instagram API響應。在檢查重複項後,我只是將每個標記調用響應的數據對象推入空結果數組中。Instagram API響應 - 數組長度奇怪

由此產生的數組奇怪。在控制檯中,結果數組顯示了完整的結構,並表示長度爲5,如預期的那樣。當記錄results.length時,它顯示的長度爲零。我用虛擬對象創建了一個測試數組作爲比較,以顯示它應該如何表現。

我的控制檯的屏幕截圖如下。

奇怪的是,results.length似乎在for循環檢查重複項時正常工作。

  var token = 'MY_TOKEN', 
       userid = MY_ID, 
       num_photos = 33, 
       hashtags = ['website', 'engraving', 'weddinginvitations', 'customstationery'], 
       results = [], 
       test_results = [{id:1},{id:2},{id:3}]; 

      // LOOP THROUGH EACH HASH 
      for(i = 0; i < hashtags.length; i++){ 
       // MAKE AJAX CALL PER HASH 
       $.ajax({ 
        url: 'https://api.instagram.com/v1/tags/' + hashtags[i] + '/media/recent', 
        dataType: 'jsonp', 
        type: 'GET', 
        data: {access_token: token, count: num_photos}, 
        success: function(response){ 
         // CHECK EACH IMAGE IN THE RESPONSE DATA AND REMOVE DUPLICATES 
         for(x in response.data){ 
          var exists = false; 
          for(var i=0;i<results.length;i++){ 
           if(results[i].id === response.data[x].id){ 
            exists = true; 
            break; 
           } 
          } 
          if(exists === false){ 
           results.push(response.data[x]); 
          } 
         } 
        }, 
        error: function(data){ 
         console.log(response); 
        } 
       }); 
      } 


      console.log(results); 
      console.log(results.length); 

      console.log(test_results); 
      console.log(test_results.length); 

enter image description here

回答

0

成功函數是異步執行的,並且開發工具將在您展開它時評估對象的內容。

如果您查看第一次登錄的陣列的截圖,則會看到它顯示爲空。只有在展開後才能看到其內容。在記錄和擴展它之間,它有充足的時間讓成功函數運行並填充它。

+0

啊!這是有道理的。嗯,看起來我可能無法繼續使用成功函數外的結果數組。我正計劃按創建日期對數組進行排序,然後將它們輸出到無序列表中。 – user3173756

0

ajax調用是異步的,所以你得到0的長度,因爲沒有任何調用完成。所以移動成功回調裏面的console.log像這樣:

if(exists === false){ 
    results.push(response.data[x]); 
} 
if(i === hashtags.length-1){ 
    console.log(results); 
    console.log(results.length); 
}