>웹 프론트엔드 >JS 튜토리얼 >비동기 JavaScript에서 `return wait Promise`와 `return Promise`의 차이점은 무엇입니까?

비동기 JavaScript에서 `return wait Promise`와 `return Promise`의 차이점은 무엇입니까?

Patricia Arquette
Patricia Arquette원래의
2024-11-28 06:20:15590검색

What's the Difference Between `return await Promise` and `return Promise` in Asynchronous JavaScript?

return wait promise와 return promise의 차이점 이해

비동기 JavaScript에서 return wait promise와 return promise의 동작은 종종 다음과 같습니다. 논쟁의 주제. 두 표현식 모두 약속 반환을 포함하지만 특정 시나리오에서는 미묘한 차이가 발생할 수 있습니다.

비동기 함수

제공된 코드 샘플에는 두 개의 비동기 함수(delay1Second)가 정의되어 있습니다. 첫 번째 함수는 return wait를 사용하여 지연 약속의 결과를 다른 약속으로 래핑하는 반면, 두 번째 함수는 기다리지 않고 단순히 지연 약속을 반환합니다.

관찰 가능한 동작

대부분의 경우, 이 두 구조 사이에는 눈에 띄는 차이가 없습니다. 두 가지 Delay1Second 함수 모두 1초 후에 해결되는 Promise를 반환합니다. 다만, 질문에서 언급한 바와 같이, Return Wait 버전은 중간 Promise 객체 생성으로 인해 약간 더 많은 메모리를 소모할 수 있습니다.

예외 처리

단, 이러한 표현식이 try-catch 블록 내에서 사용될 때 중요한 차이점이 나타납니다. 다음 예를 고려하십시오.

async function rejectionWithReturnAwait() {
  try {
    return await Promise.reject(new Error());
  } catch (e) {
    return 'Saved!';
  }
}

async function rejectionWithReturn() {
  try {
    return Promise.reject(new Error());
  } catch (e) {
    return 'Saved!';
  }
}

첫 번째 함수(rejectionWithReturnAwait)에서 반환은 대기로 래핑됩니다. 이는 함수가 거부된 약속이 거부될 때까지 기다리며, 이로 인해 비동기 블록 내에서 예외가 발생한다는 것을 의미합니다. 결과적으로 catch 핸들러에 도달하고 함수는 'Saved!'로 확인되는 Promise를 반환합니다.

반대로 두 번째 함수(rejectionWithReturn)에서는 Promise가 비동기 내에서 기다리지 않고 직접 반환됩니다. 기능. 이는 비동기 블록 내에서 예외가 발생하지 않으며 catch 핸들러가 실행되지 않음을 의미합니다. 대신 호출자는 거부된 Promise를 수신하게 됩니다.

위 내용은 비동기 JavaScript에서 `return wait Promise`와 `return Promise`의 차이점은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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