> 웹 프론트엔드 > JS 튜토리얼 > Promise.all은 어떻게 동시 비동기 작업 처리를 개선하고 처리되지 않은 거부를 방지할 수 있습니까?

Promise.all은 어떻게 동시 비동기 작업 처리를 개선하고 처리되지 않은 거부를 방지할 수 있습니까?

Mary-Kate Olsen
풀어 주다: 2024-12-23 17:03:32
원래의
764명이 탐색했습니다.

How Can Promise.all Improve Concurrent Async Operation Handling and Avoid Unhandled Rejections?

동시 비동기 작업 대기

Promise.all을 사용한 병렬 실행

여러 비동기 작업을 동시에 트리거하려면 Promise를 획득하는 패턴을 사용하지 마세요. 그런 다음 순차적으로 기다립니다. 대신 Promise.all 함수를 활용하세요.

const [value1, value2] = await Promise.all([getValue1Async(), getValue2Async()]);
로그인 후 복사

이 접근 방식은 두 비동기 작업을 동시에 시작하고 결과를 배열로 제공합니다.

거부된 약속 처리

제공된 솔루션은 작업을 병렬로 실행하지만 두 번째 작업을 기다리기 전에 첫 번째 작업이 완료될 때까지 기다립니다. 이는 병렬 실행을 허용하지만 거부된 Promise를 처리하는 데 문제가 발생합니다.

첫 번째 Promise를 완료하는 데 시간이 더 오래 걸리고 두 번째 Promise.all이 실패하면 Promise.all은 즉시 실패하여 첫 번째 Promise가 거부되는 것을 방지합니다. 이로 인해 처리되지 않은 거부 오류가 발생할 수 있습니다.

병렬 대기 구문

현재 병렬 대기를 위해 지정된 대기 구문이 없으므로 Promise.all을 사용하는 대안이 있습니다. wait.all에 관한 토론이 등장하여 향후 개선 가능성을 나타냈습니다.

접근 방식 비교

getValue1Async가 해결하는 데 500ms가 걸리고 getValue2Async가 거부하는 데 100ms가 걸리는 다음 예를 고려해 보세요.

순차 실행:

async () => {
  try {
    const value1 = await getValue1Async();
    const value2 = await getValue2Async();
  } catch (e) {
    console.error(e);
  }
};
로그인 후 복사

동시 실행 Promise.all:

async () => {
  try {
    const [value1, value2] = await Promise.all([getValue1Async(), getValue2Async()]);
  } catch (e) {
    console.timeEnd("Promise.all", e);
  }
};
로그인 후 복사

출력:

  • 순차: 콘솔 출력은 오류는
  • 동시: 콘솔 출력에 100ms 후에 오류 로그가 표시됩니다.

결론:

Promise 사용 .all은 비동기 작업의 병렬 실행을 효과적으로 활성화하고 거부된 약속을 적절하게 처리하도록 보장합니다.

위 내용은 Promise.all은 어떻게 동시 비동기 작업 처리를 개선하고 처리되지 않은 거부를 방지할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿