>웹 프론트엔드 >JS 튜토리얼 >Promise.all은 동시 대기 실행 및 오류 처리를 어떻게 향상시킬 수 있습니까?

Promise.all은 동시 대기 실행 및 오류 처리를 어떻게 향상시킬 수 있습니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-12-11 16:15:11739검색

How Can Promise.all Improve Concurrent Await Execution and Error Handling?

동시 대기 실행: 순차 실행 극복

문제:

기존 비동기 프로그래밍에서는 여러 대기 작업의 동시 실행 순차적으로 인해 차단됨

원인:

문제의 코드는 두 번째 작업을 시작하기 전에 첫 번째 대기 작업이 완료될 때까지 기다립니다.

제안된 해결 방법 :

Promise를 별도로 기다리기 전에 획득한다는 초기 제안에서는 병렬 실행이 허용됩니다. 그러나 오류 처리 및 잠재적인 처리되지 않은 거부 오류 문제가 발생합니다.

권장 접근 방식:

제안된 솔루션 대신 Promise.all을 활용하는 것이 좋습니다.

const [value1, value2] = await Promise.all([getValue1Async(), getValue2Async()]);

혜택 Promise.all:

  • 제공된 모든 Promise의 병렬 실행을 시작합니다.
  • 거절을 올바르게 처리하여 처리되지 않은 거부 오류를 방지합니다.
  • 더 간결하고 제안된 구문과 비교하여 일관된 구문

예:

타이밍 및 오류 처리의 차이를 보여주는 다음 예를 고려하십시오.

const getValue1Async = () => {
  return new Promise(resolve => {
    setTimeout(resolve, 500, "value1");
  });
};

const getValue2Async = () => {
  return new Promise((resolve, reject) => {
    setTimeout(reject, 100, "error");
  });
};

// Sequential execution with proposed solution
(async () => {
  try {
    console.time("sequential");
    const p1 = getValue1Async();
    const p2 = getValue2Async();
    const value1 = await p1;
    const value2 = await p2;
  } catch (e) {
    console.error(e);
  }
  console.timeEnd("sequential");
})();

// Concurrent execution with Promise.all
setTimeout(async () => {
  try {
    console.time("concurrent");
    const [value1, value2] = await Promise.all([getValue1Async(), getValue2Async()]);
  } catch (e) {
    console.timeEnd("concurrent", e);
  }
}, 1000);

순차 실행 예에서 코드는 두 번째 작업을 시작하기 전에 첫 번째 작업이 완료될 때까지 500ms를 기다립니다. 반면 동시 실행 예시에서는 두 번째 작업의 실패를 100ms 직후에 처리합니다.

위 내용은 Promise.all은 동시 대기 실행 및 오류 처리를 어떻게 향상시킬 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.