2016-07-11 2 views
1

안전 장치가 필요합니까? Promise.all, Promise.race 등 -Promise.all의 다음 제품 (ES6 및 Bluebird)

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

는 것이 가능 및 수집 방법에 thenables을 공급 안전합니까? 어떤 함정이라도?

질문은 Bluebird뿐만 아니라 polyfilled 및 모든 기본 ES6 약속 구현에 관한 것입니다.

+0

당신은'Promise.all()'에게 넘겨주는 반복문에서 임의의 값이나 값을 제공 할 수 있습니다. 너는 너를 너 자신의 약속에 넣을 필요가 없다. 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에 의해 하나에 변환됩니다.

+0

감사합니다. Bluebird에도 똑같이 적용됩니다. 나는 '약속 (Promise)'과 '선택 가능한 (OK)'유형이 [블루 버드 문서] (http://bluebirdjs.com/docs/api/promise.all.html)에서 서로 바꿔서 사용된다는 사실에 혼란 스러웠다. 좋아해. – estus

관련 문제