비동기화를 기다리지 마십시오!

2457 단어
프라미스 처리를 통해 콜백 지옥의 9개 고리에서 벗어날 수 있었지만 불행히도 우회해야 할 또 다른 고리가 있으며 그 고리에는 프라미스 체이닝에 수반되는 모든 좌절이 수반됩니다. 운 좋게도 Dante를 지옥에서 구한 동일한 JavaScript 신이 Async/Await의 축복받은 방법도 수여했습니다. 좋아, Dante의 Inferno를 읽은 적이 없지만 많은 then/catch 블록이 상당히 부풀어 오르고 작업하기에 유연하지 않은 시간 동안 Async/Await로 손을 더럽혔습니다. 모험을 시작하기 전에 Async/Await의 쓸데없는 역사를 알려드리겠습니다.
비동기 워크플로는 2007년 await 포인트와 함께 F# 프로그래밍 언어에 처음 도입되었으며, 이후 C# 언어의 Async/Await 메커니즘에 영향을 미쳤습니다. 결국 Haskell의 수석 개발자인 Simon Marlow는 2012년에 Python, Rust, C++ 등과 같은 다른 언어로 채택되는 async 패키지의 폭탄을 만들었습니다. JavaScript는 게임에 조금 늦었지만 결국 ECMAScript 2017 에디션에서 Async/Await를 통합했습니다. , 나머지는 역사입니다.
Async/Await는 기본적으로 Promise를 더 쉽게 사용할 수 있도록 둘러싸는 구문상의 설탕이며 (추측한 대로) Async 키워드로 먼저 선언됩니다. 작동 방식에 대해 알아보기 전에 먼저 좋은 옛 친구를 살펴본 다음/잡아 보겠습니다.

const salutation = new Promise((resolve, reject) => {
  resolve("What is up my fellow homie?");
});
salutation
  .then((value) => {
    console.log("The first promise was resolved", value);
  })
  .then((value) => {
   console.log("The second promise was resolved", value);
  })
  .catch((error) => {
    console.error("Error: The promise is rejected.", error);
  })
  .finally(() => {
    console.log(
      "This promise is now settled, meaning it has been resolved or rejected."
    );
  });


if/then 조건문이 switch/case 문보다 직관적으로 이해하기 더 쉬운 것처럼 then/catch 블록이 async/await 구성 요소보다 해석하기 쉽다는 것은 아마도 많은 개발자에게 사실일 것입니다. 코딩에 목발을 얹고 항상 새로운 영역으로 모험을 떠납니다. 이 예제에는 약속을 반환하는 변수 인사말이 있습니다. 그런 다음 내가 즉석에서 작성한 쓸모없는 코드를 반환하는 then/catch 블록과 연결됩니다.

다음은 동일한 작업을 수행하는 async/await 약속 처리의 예입니다.

async function doSomething() {
  const value = await greeting;
}

async function doSomething() {
  try {
    const value = await greeting;
    console.log("The first promise was resolved", value);
  } catch((error) {
    console.log("The second promise was resolved", value);
  } finally {
    console.log(
      "This promise is now settled, meaning it has been resolved or rejected");
  }
}


이 코드가 약간 더 짧은 방법에 주목하십시오. 키워드 async는 기본적으로 doSomething 함수가 약속을 반환하는 동시에 그 안에 비 약속도 래핑하도록 합니다. await 키워드는 Promise가 확정되고 반환될 때까지 JavaScript가 이 함수 내의 모든 진행을 중단하도록 합니다. 평소와 같이 거부의 경우 오류가 발생합니다.

이제 최소한 Async/Await의 존재에 대해 들어봤으니 안락한 영역에서 벗어나 자신의 코드로 구현하기 위해 AWAIT하지 마십시오. 지옥을 잡으려고 할 필요는 없습니다(try-catch 지옥에 대한 말장난), 약속합니다.

좋은 웹페이지 즐겨찾기