2017-09-21 8 views
0

約束事の配列が構築されてからPromise.allに渡された場合、すぐに実行が開始されるか、一度だけ実行されますかPromise.allが呼び出されますか?promiseの配列は、promise allに一度だけ渡されると実行を開始しますか?

例コード:

let promises: Promise<string> [] = [this.methodCall(), this.methodCall(), this.methodCall()]; 

Promise.all(promises).then(values => { 
    ... 
}).catch(error => { 
    ... 
}); 

また、このコード例では、すべての拒否をキャッチでしょうか?

+0

[documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/all)を読んでください。 *それは拒否する最初の約束の理由で拒否する* – trincot

+0

"それは拒否する最初の約束の理由で拒否する"、それはまだそれが他の約束の拒絶を扱うことを意味すると仮定します。 – Nelson

+0

'Promise.all()'は、他の約束関数と同様に、resolveまたはrejectのいずれかの型の結果のみを返します。したがって、Promise.all()に渡された約束が却下されると、直ちに却下され、あなたは決して待ったり、他の決議を期待したりしないでください。拒否を別々に処理する必要がある場合は、約束の順序を減らすなどの方法で行う必要があります。 – Redu

答えて

2

Promiseが作成されている間、すぐに動作します。ログを参照してください。プロミスボディ機能が作動し、5秒後にPromise.allが開始されます。

const pr = new Promise((resolve, reject) => { 
 
    console.log('Started !!!'); 
 
    resolve(); 
 
}); 
 

 
console.log('Before setTimeout'); 
 

 
setTimeout(() => { 
 
    Promise.all([pr]).then(result => console.log('Resolved !!!')); 
 
}, 5000) 
 

 
console.log('After setTimeout');

引数は解決して拒否して渡される関数Documentation

から。 executor関数は、Promise の実装で即座に実行され、解決関数と拒否関数を渡します(プロキシコンストラクタが作成された オブジェクトを返す前に実行者は と呼ばれます)。

関連する問題