BFE.dev #34. `Promise.any()` 구현

4512 단어

BFE.dev is like a LeetCode for Front End developers. I’m using it to practice my skills.





이 문서는 코딩 문제BFE.dev#34. implement Promise.any() 에 관한 것입니다.

분석



AS MDN은 말합니다.

Promise.any() takes an iterable of Promise objects and, as soon as one of the promises in the iterable fulfils, returns a single promise that resolves with the value from that promise
e item one by one randomly from rest possible positions.



우리는 정의를 따르고 전달된 약속이 해결될 때 해결되는 새로운 약속을 만들 수 있습니다.

문제는 모든 약속이 거부될 때 모든 오류를 보관할 배열이 필요하고 최종적으로 반환된 약속을 계산하여 거부한다는 것입니다.

코드를 보여주세요





/**
 * @param {Array<Promise>} promises
 * @returns {Promise}
 */
function any(promises) {
  // return a Promise, which resolves as soon as one promise resolves
  return new Promise((resolve, reject) => {
    let isFulfilled = false
    const errors = []
    let errorCount = 0
    promises.forEach((promise, index) => promise.then((data) => {
      if (!isFulfilled) {
        resolve(data)
        isFulfilled = true
      }
    }, (error) => {
      errors[index] = error
      errorCount += 1

      if (errorCount === promises.length) {
        reject(new AggregateError('none resolved', errors))
      }
    }))
  })
}


합격





다음은 설명하는 동영상입니다.

도움이 되었기를 바라며 here에서 시도해 볼 수 있습니다.

좋은 웹페이지 즐겨찾기