2016-08-06 11 views
0

.each()を使用する場合、両方のコンソールログで同じ値が返されますが、forを使用すると、2番目の値は配列の長さ、つまり配列の長さだけを返します。それらの違いは何ですか?私は何が欠けていますか?

//for (var i = 0; i < streamers.length; i++) 
 
    $.each(streamers, function(i,data) { 
 
     console.log(i); 
 
     $.getJSON('https://api.twitch.tv/kraken/streams/' + data + '?callback=?', function(data) { 
 
      console.log(i); 
 
     }); 
 
    });
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

+0

あなたは何をしようとしていますか?このコードは有効に見えません。 –

+0

@SlavaKnyazevそのコードスニペットの何が問題なのですか? – undefined

+0

@Vohuman彼は多くの括弧を欠いていましたが、編集されました。 ) –

答えて

0

あなたはiが変更されていない各反復のためのクロージャを作成している$.each付き。 forループ、i

$.getJSONコールバックが実行される前に変更されるので、($.getJSONが非同期であるため)、それは最後の可能な値を示すであろう。

+0

'GET'リクエストが瞬間的であったとしても、' i'はコールバックの前に変更されます。現在のコード*は、 "非同期"コードを実行する前に実行を終了する必要があります。 –

+0

@ just.another.programmer瞬時であった場合、非同期ではありません。 – 4castle

+0

はい、いいえ。理由はありませんが、望むのであれば、まだ非同期に実行できます。非同期は、コードが書かれている場所で順番に実行されないことを意味します。これは、スレッドが利用可能であるときに不特定の「後の時間」に実行されます。 –