2016-07-11 8 views
1

この安全装置は必要ですか?などPromise.allPromise.race、 -Promise.all(ES6とBluebird)の可聴番号

Promise.all([...].map((thenable) => Promise.resolve(thenable))); 

は、収集方法にthenablesを供給することが可能と安全ですか?どんな落とし穴?

この質問は、Bluebirdと、ポリ充てんされたネイティブES6のすべての実装に関するものです。

+0

'Promise.all()'に渡すiterableには、任意の値または値を指定できます。あなたは自分を約束に包む必要はありません。 'Promise.all()'の実装は、それらがthenableであるかどうかを調べ、そうであれば解決を待っています。もしそうでなければ、その値は解決になります。デモをご覧ください:https://jsfiddle.net/jfriend00/jgf0xwhm/ – jfriend00

答えて

5

これは必要ではなく、約束の実装自体によって行われるべきである:

all関数は、渡された約定の履行値の アレイで満たされる新しい約束を返すまたは と拒否します最初に拒否したことを約束した理由。 これは、この アルゴリズムを実行するので、渡されたiterableのすべての要素が約束するように、すべて の要素を解決します。 by MDN

ES2015 Specification, paragraph 25.4.4.1 Promise.all (iterable)

言い回しよりアクセスは:

反復可能な配列で渡された何かが約束されていない場合、それは、Promise.resolveで1に変換されます。

+0

ありがとうございます。同じことがブルーバードにも当てはまると思います。私は、「プロミス」と「可」のタイプが[ブルーバード・ドキュメント](http://bluebirdjs.com/docs/api/promise.all.html)で互換的に使用されているという事実と混乱していました。好きです。 – estus

関連する問題