2017-08-06 3 views
2

私はJSの約束について一般的な質問があります。 私の答えに対する解決策を見つけることができず、最後にここで尋ねることにしました。我々は最初の反復を見て、約束がトリガされた場合プロミスのコードはループの繰り返しで変数を参照していますか

for (var i = 0; i < 10000; i++) { 
    some_promise(function(){ 
     console.log(i); 

     // Would this i return the value of some_promise point of execution, 
     // or at the current iteration when it is triggered? 
    }); 
} 

、それが0であるかの約束を待っている間に1000(反復が上に移動しましょうになります。

それでは、次の擬似コードを見てみましょう)

あなたは私がそれのまわりで私の頭をラップ助けることができればそれは本当に参考になる。..

+2

自分で試してみませんか? 'some_promise'は何をするのですか?これは約束とは何の関係もないようです。 – PeterMader

+2

some_promiseが不意に発火するかどうかによって異なります。 –

答えて

2

letの場合にconsole.logは10000回を発射し、その一つがループでiの値を持つことになります。

例:varが最寄りの機能ブロックにスコープしてみましょうされているためです

const fun = function(){ 

    var promise = new Promise(resolve => { 
    setTimeout(resolve, 2000); 
    }) 

    for(var i=0; i<1000; i++){ 
    promise.then(() => console.log(i)); 
    } 

} 

スコープです:

const fun = function(){ 

    var promise = new Promise(resolve => { 
    setTimeout(resolve, 2000); 
    }) 

    for(let i=0; i<1000; i++){ 
    promise.then(() => console.log(i)); 
    } 

} 

あなたがvarを使用している場合にconsole.logは値として10000印刷10000を発射しますあなたのループは同期しており、約束が解決される前に少なくとも "tick"で起動します。

+0

ありがとう!それは私の約束でインデックスで作業する方法がないので、実際にはかなり迷惑です...ありがとう、とにかく! :) –

+0

@CrypticPug :)) –

関連する問題