ECMAScript 6 학습노트의 ---async 함수

1969 단어 ReactECMAScript

함의


async 함수는 무엇입니까?한마디로 Generator 함수의 문법 설탕이다.앞의 문장에는 두 개의 파일을 차례로 읽는 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());
};

  위 코드의 함수gen은 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로 바꾸는 것이다.

활용단어참조


 몇 밀리초 후에 값을 출력할지 지정합니다.
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);

-----hello world



await 명령


  정상적인 경우, await 명령 뒤에 Promise 대상이 있으며, 이 대상의 결과를 되돌려줍니다.Promise 대상이 아니면 해당 값을 반환합니다.
async function f() {
  return 'hello world';
}

f().then(v => console.log(v))


-----hello world


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: 

좋은 웹페이지 즐겨찾기