async 함수 원리 및 사용 방법

4722 단어

async 함수는 무엇입니까?한마디로 Generator 함수의 문법당, async 함수의 실현 원리는 Generator 함수와 자동 집행기를 하나의 함수에 포장하는 것이다.


1, Generator 함수

const fs = require('fs');

const readFile = function (fileName) {
  return new Promise(function (resolve, reject) {
    fs.readFile(fileName, function(error, data) {
      if (error) return reject(error);
      resolve(data);
    });
  });
};

const gen = function* () {
  const f1 = yield readFile('/etc/fstab');
  const f2 = yield readFile('/etc/shells');
  console.log(f1.toString());
  console.log(f2.toString());
};

async로 전환:
const asyncReadFile = async function () {
  const f1 = await readFile('/etc/fstab');
  const f2 = await readFile('/etc/shells');
  console.log(f1.toString());
  console.log(f2.toString());
};

비교해 보면 async 함수는 Generator 함수의 별표(*async, yieldawait로 바꾸는 것이다.
async는Generator를 개선했을 뿐입니다.

2, async의 구체적인 사용과 장점

async 함수는 Promise 객체를 반환하고 then 메서드를 사용하여 콜백 함수를 추가할 수 있습니다.함수가 실행될 때 await를 만나면 먼저 되돌아와 비동기적인 조작이 끝날 때까지 기다렸다가 함수 체내 뒤의 문장을 실행한다.
function timeout(ms) {
  return new Promise((resolve) => {
    setTimeout(resolve, ms);
  });
}

async function asyncPrint(value, ms) {
  await timeout(ms);
  console.log(value);
}

asyncPrint('hello world', 50);

위 코드는 50밀리초 후에 출력hello world을 지정합니다.

async 비동기 함수 변체:

 : async function foo() {}
 : const foo = async function () {};
 :let obj = { async foo() {} }
 : const foo = async () => {};

이해:

  • async는 이것은 async 함수이고, await는 이 함수에서만 사용할 수 있음을 나타낸다.

  • await는 여기서 await 뒤의 작업이 완료되기를 기다리고 다음 코드를 실행합니다.

  • wait 뒤에 바짝 붙어 있는 가장 좋은 것은 시간 소모적인 조작이나 비동기적인 조작이다.


  •  
     

    3, 오류 처리


    await 뒤의 비동기화 작업이 잘못되면, async 함수로 되돌아오는 Promise 대상과reject입니다.

    async function f() {
      await new Promise(function (resolve, reject) {
        throw new Error(' ');
      });
    }
    
    f()
    .then(v => console.log(v))
    .catch(e => console.log(e))
    // Error: 

    오류를 방지하는 방법도 코드 블록에 넣는 것이다.
    async function main() {
      try {
        const val1 = await firstStep();
        const val2 = await secondStep(val1);
        const val3 = await thirdStep(val1, val2);
    
        console.log('Final: ', val3);
      }
      catch (err) {
        console.error(err);
      }
    }

    말하자면 async도 Promis 대상이다. 우리는 async 뒤에 then이나catch라는 물건을 붙여서 오류를 방지할 수 있다.
    다음으로 전송:https://www.cnblogs.com/luozhixiang/p/9116965.html

    좋은 웹페이지 즐겨찾기