2017-12-19 3 views
-4

promiseSettle이 Promise을 반환해야합니다.이 약속은 input의 모든 약속이 해결 될 때 충족되어야합니다. 해결되거나 거절 됨).나는`약속`*의 모든 약속이 해결 될 때 (약속했거나 거절 된 것을 의미 함)

성취 값은 객체의 배열, 각각 다음과 같은 서명을 가지고있을 것입니다 :

  • @typedef {오브젝트} 정착
  • {부울} isFulfilled
  • @property - 약속
  • 를 해결 여부 @ 프로퍼티가 결정된 값 (존재하는 경우)
  • @property {* =} reason - 이유는 (프로퍼티가 boolean 인 경우) 약속
  • @param 거부되는 (존재하는 경우) 입력 {배열>.} - 약속
  • @return {. 약속>}

    function promiseSettle(input) { 
        let promiseArray = []; 
        for (let i = 0; i < input.length; i++) { 
         Promise.resolve(input[i]).then(output => { 
          promiseArray.push(output); 
          console.log(promiseArray); 
         }, reason => { 
          promiseArray.push(reason); 
         })  
        } 
    } 
    
    // testing data 
    var p1 = new Promise((resolve, reject) => { 
        setTimeout(reject, 1, "first promise of 1 sec"); 
    }); 
    var p2 = new Promise((resolve, reject) => { 
        setTimeout(resolve, 1, "second promise of 2 sec"); 
    }) 
    var p3 = new Promise((resolve, reject) => { 
        setTimeout(resolve, 1, "rejected promise"); 
    }) 
    promiseSettle([p1, p2, p3]) 
    

배열 누군가가이 일을 도울 수 있습니까? 예상되는 매개 변수를 사용하여 약속을 반환하는 방법을 잘 모르겠습니다.

+1

코드는 이해되지 않는다. 다음과 같이 :'for (let i = 0; i {'는 유효한 코드조차도 아니야, 정리해주십시오.) – Intervalia

+0

이것이 무슨 뜻입니까? https://stackoverflow.com/q/31424561/125981 –

+0

"settle"소리가납니다. 아마도 당신은 아마도 태그가 붙지 않은 다른 것을 가지고있을 것 같은가요? 아니면 단지 sudo 코드를 매시 했나요? –

답변

1

이렇게해야합니다.

function promiseSettle(inputList) { 
 
    let promiseArray = inputList.map(
 
    input => { 
 
     return new Promise((resolve, reject) => { 
 
     input.then(
 
      value => { 
 
      resolve({ 
 
       isFulfilled: true, 
 
       isRejected: false, 
 
       value 
 
      }); 
 
      }, 
 
      reason => { 
 
      resolve({ 
 
       isFulfilled: false, 
 
       isRejected: true, 
 
       reason 
 
      }); 
 
      } 
 

 
     ); 
 
     }); 
 
    } 
 
); 
 
    
 
    return Promise.all(promiseArray); 
 
} 
 

 
// testing data 
 
var p1 = new Promise((resolve, reject) => { 
 
    setTimeout(resolve, 1, "first promise of 1 sec"); 
 
}); 
 
var p2 = new Promise((resolve, reject) => { 
 
    setTimeout(resolve, 2, "second promise of 2 sec"); 
 
}) 
 
var p3 = new Promise((resolve, reject) => { 
 
    setTimeout(reject, 1, "rejected promise"); 
 
}) 
 

 
promiseSettle([p1, p2, p3]).then(
 
    promises => { 
 
    console.log(promises); 
 
    } 
 
);

관련 문제