>웹 프론트엔드 >JS 튜토리얼 >Promise 생성자 내에 'async/await'를 중첩하는 것이 왜 안티 패턴인가요?

Promise 생성자 내에 'async/await'를 중첩하는 것이 왜 안티 패턴인가요?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-12-16 13:49:12643검색

Why is Nesting `async/await` within Promise Constructors an Anti-Pattern?

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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