문제:
기존 비동기 프로그래밍에서는 여러 대기 작업의 동시 실행 순차적으로 인해 차단됨
원인:
문제의 코드는 두 번째 작업을 시작하기 전에 첫 번째 대기 작업이 완료될 때까지 기다립니다.
제안된 해결 방법 :
Promise를 별도로 기다리기 전에 획득한다는 초기 제안에서는 병렬 실행이 허용됩니다. 그러나 오류 처리 및 잠재적인 처리되지 않은 거부 오류 문제가 발생합니다.
권장 접근 방식:
제안된 솔루션 대신 Promise.all을 활용하는 것이 좋습니다.
const [value1, value2] = await Promise.all([getValue1Async(), getValue2Async()]);
혜택 Promise.all:
예:
타이밍 및 오류 처리의 차이를 보여주는 다음 예를 고려하십시오.
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 중국어 웹사이트의 기타 관련 기사를 참조하세요!