私は一連のチェーンでうまく動作しているチェーン可能な約束事を持っていますが、今度はforループのseriosをforループと呼んでいますが、期待通りに機能しません。forループ内の約束が正しく実行されない
私のdemo plunkerを参照し、コンソールの出力を参照してください。
以下は私の連鎖約束の構造です。私はすべてpublicIPを返します。これはfunTwo
によって返されます。私はfunThree()
を完了し、すべてを取得したいpublicIP。私は$q.when()
が約束オブジェクトの値を作ることを知っています。
これまでにconsole.log('res three');
と実行されていたconsole.log('pA', promiseArray);
と、それ以前にsuccessHandler
とfinally
が呼ばれていたことが分かります。ここで
は確かに私は、適切な場所でreturn;
を記述する必要が親切forループ内のすべての機能を実行する方法を私を助けるとsuccessHandler
MyService.funZero()
.then(function(response) {
console.log(response);
var promiseArray = [];
for(var i = 0; i < 2 ; i++) {
console.log('I', i);
MyService.funOne()
.then(MyService.funTwo)
.then(function(res2) {
console.log('res two', res2);
publicIP = res2.ip;
console.log('i', publicIP);
promiseArray.push({'ip': publicIP});
return MyService.funThree(publicIP);
})
.then(function() {
console.log('res three');
})
} // for loop ends
console.log('pA', promiseArray);
return $q.when(promiseArray);
})
.then(function(res4){
console.log('after for loop', res4);
})
.then(successHandler)
.catch(errorHandler)
.finally(final, notify);
[ループ内のJavaScriptの閉鎖 - シンプルな実用的な例]の可能な重複(http://stackoverflow.com/questions/750486/javascript-closure-inside-loops-simple-実用的な例) – Phil
これは重複していません@Phil ..私はすでにこれを読んでいますが、angularJSでの適用方法はありませんでした。 –
あなたは正しいです、私の謝罪。 – Phil