JavaScript 함수 본문 내에서 await를 호출하는 데 비동기가 필요한 이유는 무엇입니까?

산딥 치탈 레

하나는 사용하는 비동기 사용에 포함하는 기능을 키워드 await를을 함수 본체 내부.

async function fetchMovies() {
  const response = await fetch('/movies');
  console.log(response);
}

fetchMovies();

AWAIT은 비동기 완료를 차단하는 데 사용되는 페치 () 호출. 코드에서 볼 수 있듯이 fetchMovies () 함수 는 값을 반환하지 않습니다. 그리고 그렇게하더라도 호출자가 반환 값을 사용하는 방식에 영향을 미칠 수 있지만 함수 본문에서 다른 비동기 호출을 호출하는 데 왜 중요할까요?

내 질문은 이것이 왜 필요한 것입니까? 그것에 대한 좋은 설명이 있습니까? await의 실제 구현의 필요성 과 이전 JavaScript 버전에서 지원하는 것과 관련이 있습니까?

나는 iffi 패턴이 사용되어 await 를 사용할 수 있다는 것을 알고 있지만 어떤 식 으로든 iffi 코드 블록 을 따르는 코드의 의미를 변경 합니까?

(async () => {
  const response = await fetch('/movies');
  console.log(response);
})();

나는 또한 모듈에서 지원되는 최상위 레벨을 알고 있습니다 .

정말 분명한 것을 놓치고있을 수 있습니다.

패트릭 로버츠

async키워드가 존재하는 이유는 세 가지입니다 .

  1. 2015 년 이전의 ECMAScript 언어 버전에서는 await키워드가 아닙니다. 함수를 표시하면 함수 async본문 내 언어 문법의 주요 변경 사항을 나타내는 구문 "구제"가 제공됩니다.

    이것이 가장 중요한 이유입니다. async키워드가 없으면 ECMAScript 5 또는 이전 버전으로 작성된 모든 프로그램이 await키워드를 변수로 사용하면 더 이상 작동하지 않습니다 (실제로 이는 일부 경우 async/ await표준화 이전에 폴리 필로 의도적으로 수행 되었음 ). async사양에 추가하지 않고 . 이 때문에 async는 언어 변경을 방지하기 위해 구문 상 필요합니다 .

  2. 함수가 비동기인지 여부를 결정하기 위해 무한 예측을 피하면서 파서에 편리한 마커를 제공합니다.

    이것은 구문 분석을 더 효율적으로 만들어 ECMAScript 구현 자와 개발자 모두에게 매력적이지만,이 이유만으로는 async구문에 꼭 필요한 것은 아닙니다 .

  3. async또한 await키워드가 본문 에 있는지 여부에 관계없이 수행되는 함수에 대한 자체 변환을 수행합니다 .

    다음 두 가지 기능을 고려하십시오.

    function foo() {
      if (Math.random() < 0.5) {
        return 'return';
      } else {
        throw 'throw';
      }
    }
    
    async function bar() {
      if (Math.random() < 0.5) {
        return 'return';
      } else {
        throw 'throw';
      }
    }
    

    async의 다음 변환을 수행합니다 function bar().

    function bar() {
      return new Promise((resolve, reject) => {
        try {
          resolve((/*async function bar*/() => {
            if (Math.random() < 0.5) {
              return 'return';
            } else {
              throw 'throw';
            }
          })());
        } catch (reason) {
          reject(reason);
        }
      });
    }
    

    Promise 생성자 executor 함수는 동 기적으로 오류가 발생하면 암시 적으로 거부하므로 promise에 익숙한 사용자는 위의 내용을 단순화 할 수 있음을 인식 할 것입니다.

    function bar() {
      return new Promise((resolve) => {
        if (Math.random() < 0.5) {
          return resolve('return');
        } else {
          throw 'throw';
        }
      });
    }
    

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

JavaScript 함수 본문 내에서 await를 호출하는 데 비동기가 필요한 이유는 무엇입니까?

분류에서Dev

내 javascript 함수 호출에 'javascript :'가 필요한 이유는 무엇입니까?

분류에서Dev

MVC에서 제공하는 기본 기능이 이미 있는데 colntroller 메서드를 호출하는 Ajax / jQuery가 필요한 이유는 무엇입니까?

분류에서Dev

비동기 함수에서 첫 번째 await 문을 실행 한 후 컨트롤이 호출자 함수로 돌아가는 이유는 무엇입니까?

분류에서Dev

JavaScript에서 Wasm으로 컴파일 된 비동기 Rust 함수를 호출 할 때 문자열 인수가 비어있는 이유는 무엇입니까?

분류에서Dev

내 기본 배열이 비어 있는데 몽구스가 빈 문자열로 내 유효성 검사기를 호출하는 이유는 무엇입니까?

분류에서Dev

GCC에서 멤버 함수를 호출하기 전에 new 주위에 대괄호가 필요한 이유는 무엇입니까?

분류에서Dev

내 함수에 인수가 필요한 이유와 with + without을 호출하는 방법은 무엇입니까?

분류에서Dev

C ++에서 호출하기 전에 함수 정의가 필요한 이유는 무엇입니까?

분류에서Dev

SQL Server에서 HASHBYTES를 수행하는 데 'FOR XML XXX'가 필요한 이유는 무엇입니까?

분류에서Dev

C ++ : 호출에 일치하는 함수 없음 : 빈 생성자가 필요한 이유는 무엇입니까?

분류에서Dev

SwiftUI에서 비동기 요청이 완료된 후 함수를 호출하는 방법은 무엇입니까?

분류에서Dev

재귀 비동기 함수에 'Rust의 정적 매개 변수'가 필요한 이유는 무엇입니까?

분류에서Dev

해시 된 암호를 비교하는 데 SlowEquals 함수가 중요한 이유는 무엇입니까?

분류에서Dev

React Native로 제출 한 후 useEffect에서 비동기 함수를 호출하는 방법은 무엇입니까?

분류에서Dev

내 await lambda.invoke 함수가 람다를 여러 번 호출하는 이유는 무엇입니까?

분류에서Dev

Javascript (ES.next)에서 await를 사용하려는 경우 함수를 비동기로 선언해야하는 이유는 무엇입니까?

분류에서Dev

다른 데이터 유형으로 동일한 함수를 호출하는 방법은 무엇입니까?

분류에서Dev

JavaScript : 비동기 내부 함수 내에서 외부 함수를 반환하는 방법은 무엇입니까?

분류에서Dev

비동기 함수의 메인 스레드에서 완료를 호출하는 이유는 무엇입니까?

분류에서Dev

루프 내에서 비동기 함수 완료 후 함수를 호출하는 방법은 무엇입니까?

분류에서Dev

기본 데이터 컨테이너에서 요소를 구축 할 수없는 이유는 무엇입니까?

분류에서Dev

기본 개체 (비가 상)를 사용하여 파생 클래스에 정의 된 함수를 호출 할 수있는 이유는 무엇입니까?

분류에서Dev

"command"없이 cd (shell 함수)에서 cd (내장)를 호출하면 무한 루프가 발생하는 이유는 무엇입니까?

분류에서Dev

필요한 모든 코드가 내부에있는 함수 또는 필요한 코드가있는 내부에 다른 함수가있는 함수를 호출하는 것이 더 좋은 방법은 무엇입니까?

분류에서Dev

C #에서 이러한 추상 함수를 구현할 필요가없는 이유는 무엇입니까?

분류에서Dev

Kotlin에서 블록 본문 오류가있는 함수에 '반환'표현식이 필요한 이유는 무엇입니까?

분류에서Dev

비밀번호없이 sudo를 실행할 수 있는데 sudo를 실행하기 위해 tty가 필요한 이유는 무엇입니까?

분류에서Dev

어떤 이유로 누군가 함수 내에서 함수를 호출하는 조건을 호출할까요?

Related 관련 기사

  1. 1

    JavaScript 함수 본문 내에서 await를 호출하는 데 비동기가 필요한 이유는 무엇입니까?

  2. 2

    내 javascript 함수 호출에 'javascript :'가 필요한 이유는 무엇입니까?

  3. 3

    MVC에서 제공하는 기본 기능이 이미 있는데 colntroller 메서드를 호출하는 Ajax / jQuery가 필요한 이유는 무엇입니까?

  4. 4

    비동기 함수에서 첫 번째 await 문을 실행 한 후 컨트롤이 호출자 함수로 돌아가는 이유는 무엇입니까?

  5. 5

    JavaScript에서 Wasm으로 컴파일 된 비동기 Rust 함수를 호출 할 때 문자열 인수가 비어있는 이유는 무엇입니까?

  6. 6

    내 기본 배열이 비어 있는데 몽구스가 빈 문자열로 내 유효성 검사기를 호출하는 이유는 무엇입니까?

  7. 7

    GCC에서 멤버 함수를 호출하기 전에 new 주위에 대괄호가 필요한 이유는 무엇입니까?

  8. 8

    내 함수에 인수가 필요한 이유와 with + without을 호출하는 방법은 무엇입니까?

  9. 9

    C ++에서 호출하기 전에 함수 정의가 필요한 이유는 무엇입니까?

  10. 10

    SQL Server에서 HASHBYTES를 수행하는 데 'FOR XML XXX'가 필요한 이유는 무엇입니까?

  11. 11

    C ++ : 호출에 일치하는 함수 없음 : 빈 생성자가 필요한 이유는 무엇입니까?

  12. 12

    SwiftUI에서 비동기 요청이 완료된 후 함수를 호출하는 방법은 무엇입니까?

  13. 13

    재귀 비동기 함수에 'Rust의 정적 매개 변수'가 필요한 이유는 무엇입니까?

  14. 14

    해시 된 암호를 비교하는 데 SlowEquals 함수가 중요한 이유는 무엇입니까?

  15. 15

    React Native로 제출 한 후 useEffect에서 비동기 함수를 호출하는 방법은 무엇입니까?

  16. 16

    내 await lambda.invoke 함수가 람다를 여러 번 호출하는 이유는 무엇입니까?

  17. 17

    Javascript (ES.next)에서 await를 사용하려는 경우 함수를 비동기로 선언해야하는 이유는 무엇입니까?

  18. 18

    다른 데이터 유형으로 동일한 함수를 호출하는 방법은 무엇입니까?

  19. 19

    JavaScript : 비동기 내부 함수 내에서 외부 함수를 반환하는 방법은 무엇입니까?

  20. 20

    비동기 함수의 메인 스레드에서 완료를 호출하는 이유는 무엇입니까?

  21. 21

    루프 내에서 비동기 함수 완료 후 함수를 호출하는 방법은 무엇입니까?

  22. 22

    기본 데이터 컨테이너에서 요소를 구축 할 수없는 이유는 무엇입니까?

  23. 23

    기본 개체 (비가 상)를 사용하여 파생 클래스에 정의 된 함수를 호출 할 수있는 이유는 무엇입니까?

  24. 24

    "command"없이 cd (shell 함수)에서 cd (내장)를 호출하면 무한 루프가 발생하는 이유는 무엇입니까?

  25. 25

    필요한 모든 코드가 내부에있는 함수 또는 필요한 코드가있는 내부에 다른 함수가있는 함수를 호출하는 것이 더 좋은 방법은 무엇입니까?

  26. 26

    C #에서 이러한 추상 함수를 구현할 필요가없는 이유는 무엇입니까?

  27. 27

    Kotlin에서 블록 본문 오류가있는 함수에 '반환'표현식이 필요한 이유는 무엇입니까?

  28. 28

    비밀번호없이 sudo를 실행할 수 있는데 sudo를 실행하기 위해 tty가 필요한 이유는 무엇입니까?

  29. 29

    어떤 이유로 누군가 함수 내에서 함수를 호출하는 조건을 호출할까요?

뜨겁다태그

보관