ES6 -- async 함수

2468 단어 ES6
async 함수는 여러 개의 비동기적인 조작으로 볼 수 있고 포장된 하나의 Promise 대상으로 볼 수 있다. await 명령은 내부then 명령의 문법당이다.
1. 기본용법async 함수는 프로미스 대상을 되돌려줍니다. then 방법으로 리셋 함수를 추가할 수 있습니다.함수가 실행될 때 await를 만나면 먼저 되돌아와 비동기적인 조작이 완성될 때까지 기다린 다음에 함수 체내 뒤의 문장을 실행한다.
async function getStockPriceByName(name) {
  const symbol = await getStockSymbol(name);
  const stockPrice = await getStockPrice(symbol);
  return stockPrice;
}

getStockPriceByName('goog').then(function (result) {
  console.log(result);
});

2. 문법async 함수는 Promise 객체를 반환합니다.async 함수 내부return 문장이 되돌아오는 값은 then 방법 리셋 함수의 매개 변수가 된다.
async function f() {
  return 'hello world';
}

f().then(v => console.log(v))
// "hello world"

위 코드에서 함수f 내부return 명령이 되돌아오는 값은 then 방법의 리셋 함수에 의해 수신됩니다.async 함수 내부에서 오류가 발생하면 되돌아오는 Promise 대상reject 상태가 됩니다.던진 오류 대상은 catch 방법 리셋 함수에 의해 수신됩니다.
async function f() {
  throw new Error(' ');
}

f().then(
  v => console.log(v),
  e => console.log(e)
)
// Error:  

3. Promise 객체의 상태 변화async 함수가 되돌아오는 Promise 대상은 내부 모든await 명령 뒤에 있는 Promise 대상이 실행될 때까지 기다려야 상태 변화가 발생합니다. return 문장이나 버퍼링 오류가 발생하지 않는 한.즉 async 함수 내부의 비동기 조작이 끝나야만 then 방법이 지정한 리셋 함수를 실행할 수 있다는 것이다.
다음은 하나의 예다.
async function getTitle(url) {
  let response = await fetch(url);
  let html = await response.text();
  return html.match(/([\s\S]+)/i)[1];
}
getTitle('https://tc39.github.io/ecma262/').then(console.log)
// "ECMAScript 2017 Language Specification"

위 코드에서 함수getTitle 내부에는 세 가지 조작이 있는데 그것이 바로 웹 페이지를 캡처하고 텍스트를 꺼내며 페이지 제목과 일치하는 것이다.이 세 가지 조작이 모두 완성되어야만 then 방법 중의 console.log를 실행할 수 있다.
4. 주의점 사용await 명령 뒤의 Promise 대상은 실행 결과rejected일 수 있으므로 await 명령을 try...catch 코드 블록에 넣는 것이 좋다.
async function myFunction() {
  try {
    await somethingThatReturnsAPromise();
  } catch (err) {
    console.log(err);
  }
}

//  

async function myFunction() {
  await somethingThatReturnsAPromise()
  .catch(function (err) {
    console.log(err);
  });
}

좋은 웹페이지 즐겨찾기