2017-02-09 20 views
0

ループ変数にアクセスすると、約束を解決するのがなぜ機能するのか理解してくれる人がいますか?処理するための正しい方法は何ですかループ内で約束を解決する

private getData(): Promise<void> { 
    return Promise.resolve(); 
} 

:のgetData()がのように定義されている場合

for (let i = 0; i < 5; i++) { 
    this.getData() 
     .then(() => console.log("gotData")); 
} 

for (let i = 0; i < 5; i++) { 
    this.getData() 
     .then(() => console.log("gotData " + i)); 
} 

が、一度このログのみ:たとえば、これは5回を記録しますループで約束する?

+0

これはバグです(ループの最適化に関して)。私はtypescryptを持っていませんが、 'for(++ i <5)'のように 'for'ループで' while'をインクリメントで書き直すとどのように動作するのか知りたいだけです。 – oklas

+2

あなたのコンソールを見てください。出力の右端に「5」が表示されますか?ブラウザコンソールは、複数の出力が等しい場合、複数の出力を1つに縮小します。もちろん、テキストが異なる場合は、それを行うことはできません。 – Matthias247

答えて

1

Matthiasはすでに言っているように、ブラウザのコラプスコンソール出力は同じでカウントインジケータを表示します。コードはまったく同じように動作します。とにかく:


あなたは順次Promiseのを解決したい場合は、このような何かしなければならない。順序はあなたがPromise.allを使用することができる問題ではない場合

[1,2,3,4,5].reduce(
 
    (acc, i) => { 
 
    acc.then(() => console.log(i)); 
 
    return acc; 
 
    }, 
 
    Promise.resolve() 
 
);

を。トピックに関する詳細情報が必要な場合は、単にStackOverflowを検索してください。たくさんあります)

+0

これはChromeのバグかもしれないと思います。私は同じログをグループ化する機能を認識していますが、この場合は発生していません。他の場合はそうです。 Firefoxでテストされ、正しく動作します。 – moldstadt

+0

ありがとうございます。私を正しい方向に向ける。 – moldstadt

関連する問題