여기에있는 사양을 따르고 있으며 onFulfilled를 여러 인수로 호출 할 수 있는지 확실하지 않습니다.
아니, 첫 번째 매개 변수 만 약속 생성자의 해상도 값으로 처리됩니다. 객체 또는 배열과 같은 복합 값으로 해결할 수 있습니다.
구체적인 약속 구현이 어떻게 수행되는지는 신경 쓰지 않고 w3c 사양을 따르고 싶습니다.
그것이 내가 틀렸다고 믿는 곳입니다. 이 사양은 최소화되도록 설계되었으며 약속 라이브러리간에 상호 운용 되도록 제작되었습니다 . 아이디어는 DOM 선물이 안정적으로 사용할 수 있고 라이브러리가 소비 할 수있는 부분 집합을 갖는 것입니다. 약속의 구현은 지금 당신이 요구하는 것을 수행합니다 .spread
. 예를 들면 다음과 같습니다.
Promise.try(function(){
return ["Hello","World","!"];
}).spread(function(a,b,c){
console.log(a,b+c); // "Hello World!";
});
블루 버드 와 함께 . 이 기능을 원하면 솔루션을 폴리 필하는 것이 좋습니다.
if (!Promise.prototype.spread) {
Promise.prototype.spread = function (fn) {
return this.then(function (args) {
return Promise.all(args); // wait for all
}).then(function(args){
//this is always undefined in A+ complaint, but just in case
return fn.apply(this, args);
});
};
}
이를 통해 다음을 수행 할 수 있습니다.
Promise.resolve(null).then(function(){
return ["Hello","World","!"];
}).spread(function(a,b,c){
console.log(a,b+c);
});
기본 약속으로 쉽게 바이올린 . 또는 브라우저에서 현재 (2018) 일반적인 스프레드를 사용하십시오.
Promise.resolve(["Hello","World","!"]).then(([a,b,c]) => {
console.log(a,b+c);
});
또는 기다리고 있습니다 :
let [a, b, c] = await Promise.resolve(['hello', 'world', '!']);