웹 프론트엔드 JS 튜토리얼 Promise 생성자 내에서 Async/Await를 사용하는 것이 안티 패턴인 이유는 무엇입니까?

Promise 생성자 내에서 Async/Await를 사용하는 것이 안티 패턴인 이유는 무엇입니까?

Jan 05, 2025 am 11:23 AM

Why is Using Async/Await Inside a Promise Constructor an Anti-Pattern?

Promise 생성자 안티 패턴: Promise() 내에서 Async/Await 사용

비동기 프로그래밍에서 실행기 함수 내에서 async/await 사용 Promise() 생성자의 패턴은 안티패턴으로 간주됩니다. 이 관행에는 프라미스 내에 프라미스를 포함시키는 작업이 포함되어 있어 올바르게 전파되지 않을 수 있는 잠재적인 오류가 발생할 수 있습니다.

아래 코드 조각을 고려하세요.

const { eachLimit } = require("async");

function myFunction() {
 return new Promise(async (resolve, reject) => {
   eachLimit((await getAsyncArray), 500, (item, callback) => {
     // do other things that use native promises.
   }, (error) => {
     if (error) return reject(error);
     // resolve here passing the next value.
   });
 });
}
로그인 후 복사

이 예에서는 myFunction이 호출되고 Promise 생성자는 비동기 함수를 실행자로 사용하여 호출됩니다. 이 패턴은 오류가 제대로 전파되지 않을 수 있기 때문에 문제가 됩니다. EachLimit 콜백 내에서 오류가 발생하면 Promise에 의해 포착되지 않고 자동으로 실패합니다.

또한 Promise 생성자 내에서 async/await를 사용하면 이러한 트랩이 더욱 놀라운 결과를 가져올 수 있습니다. 예를 들어 다음을 비교해 보세요.

let p = new Promise(resolve => {
  ""(); // TypeError
  resolve();
});

(async () => {
  await p;
})().catch(e => console.log("Caught: " + e)); // Catches it.
로그인 후 복사

이 예에서는 TypeError가 실행기 함수 내에서 동기적으로 발생합니다. 그러나 async/await를 사용하여 Promise를 기다리는 경우 Promise가 해결되기 전에 발생한 오류라도 catch 블록에 의해 포착됩니다. 이 동작은 혼란과 예상치 못한 결과를 초래할 수 있습니다.

이러한 안티 패턴을 피하려면 Promise() 생성자의 실행기 함수 내에서 async/await를 사용하지 않는 것이 좋습니다. 대신 then 또는 catch 메소드를 사용하여 추가 Promise를 연결하고 오류를 처리하세요.

위 내용은 Promise 생성자 내에서 Async/Await를 사용하는 것이 안티 패턴인 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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

뜨거운 기사 태그

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

JavaScript로 문자열 문자를 교체하십시오 JavaScript로 문자열 문자를 교체하십시오 Mar 11, 2025 am 12:07 AM

JavaScript로 문자열 문자를 교체하십시오

jQuery 날짜가 유효한지 확인하십시오 jQuery 날짜가 유효한지 확인하십시오 Mar 01, 2025 am 08:51 AM

jQuery 날짜가 유효한지 확인하십시오

jQuery는 요소 패딩/마진을 얻습니다 jQuery는 요소 패딩/마진을 얻습니다 Mar 01, 2025 am 08:53 AM

jQuery는 요소 패딩/마진을 얻습니다

10 JQuery 플러그인을 확인할 가치가 있습니다 10 JQuery 플러그인을 확인할 가치가 있습니다 Mar 01, 2025 am 01:29 AM

10 JQuery 플러그인을 확인할 가치가 있습니다

10 JQuery Accordions 탭 10 JQuery Accordions 탭 Mar 01, 2025 am 01:34 AM

10 JQuery Accordions 탭

노드 및 HTTP 콘솔로 HTTP 디버깅 노드 및 HTTP 콘솔로 HTTP 디버깅 Mar 01, 2025 am 01:37 AM

노드 및 HTTP 콘솔로 HTTP 디버깅

사용자 정의 Google 검색 API 설정 자습서 사용자 정의 Google 검색 API 설정 자습서 Mar 04, 2025 am 01:06 AM

사용자 정의 Google 검색 API 설정 자습서

jQuery div에 스크롤 바를 추가합니다 jQuery div에 스크롤 바를 추가합니다 Mar 01, 2025 am 01:30 AM

jQuery div에 스크롤 바를 추가합니다

See all articles