Promise 생성자 내 중첩 async/await의 안티 패턴
이 경우 async.eachLimit 함수를 사용하여 관리합니다. 동시 작업 수가 늘어나면 딜레마가 발생합니다. 초기 유혹은 다음과 같이 코드를 구성하는 것입니다.
function myFunction() { return new Promise(async (resolve, reject) => { eachLimit((await getAsyncArray), 500, (item, callback) => { // Operations using native promises }, (error) => { if (error) return reject(error); // Resolve with the next value }); }); }
"myFunction" 함수를 비동기식으로 선언하는 것이 논리적으로 보일 수 있지만 "eachLimit" 함수의 내부 콜백이 남아 있기 때문에 실현 가능하지 않습니다. 접근할 수 없습니다. 그러나 이 접근 방식은 오류가 처리되지 않은 상태로 남아 있을 가능성이 있다는 심각한 함정을 내포합니다.
이 접근 방식은 다른 Promise의 생성자 내에서 Promise를 사용하는 것과 관련된 안티 패턴의 교과서적인 예입니다. 이 경우 처리되지 않은 오류가 발생할 위험이 특히 심각합니다. 이를 방지하려면 다음 코드 조각을 고려하세요.
let p = new Promise(resolve => { ""(); // TypeError resolve(); }); (async () => { await p; })().catch(e => console.log("Caught: " + e)); // Catches the error.
이 시나리오에서는 첫 번째 줄에서 예외가 발생하지만 오류는 비동기 화살표 함수의 "catch" 블록에 의해 정상적으로 처리됩니다. 안정성을 유지하고 코드베이스에서 예기치 않은 동작을 방지하려면 적절한 오류 처리가 중요합니다.
위 내용은 Promise 생성자 내에 'async/await'를 중첩하는 것이 왜 안티 패턴인가요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!