여러 비동기 작업을 동시에 트리거하려면 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); } };
출력:
결론:
Promise 사용 .all은 비동기 작업의 병렬 실행을 효과적으로 활성화하고 거부된 약속을 적절하게 처리하도록 보장합니다.
위 내용은 Promise.all은 어떻게 동시 비동기 작업 처리를 개선하고 처리되지 않은 거부를 방지할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!