generator
async & await

팀 러버덕 by Hoon

제너레이터 함수의 정의

function* keyword

function* counter() {
  console.log('첫번째 호출');
  yield 1;                  // 첫번째 호출 시에 이 지점까지 실행된다.
  console.log('두번째 호출');
  yield 2;                  // 두번째 호출 시에 이 지점까지 실행된다.
  console.log('세번째 호출');  // 세번째 호출 시에 이 지점까지 실행된다.
}

const generatorObj = counter();

console.log(generatorObj.next()); // 첫번째 호출 {value: 1, done: false}
console.log(generatorObj.next()); // 두번째 호출 {value: 2, done: false}
console.log(generatorObj.next()); // 세번째 호출 {value: undefined, done: true}

제너레이터 함수의 활용

next/yield 호출을 사용

function* gen() {
  let ask1 = yield "2 + 2 = ?";
  alert(ask1); // 4

  let ask2 = yield "3 * 3 = ?"
  alert(ask2); // 9
}

let generator = gen();
alert( generator.next().value ); // "2 + 2 = ?"
alert( generator.next(4).value ); // "3 * 3 = ?"
alert( generator.next(9).done ); // true

제너레이터 함수의 활용

next/yield 호출을 사용

async/await

ES8 부터 제공 

프로미스 기반으로 동작

비동기 처리를 동기처럼 동작하도록 구현

async/await vs promise

  • asnyc/await 는 비동기 코드를 작성하는 새로운 방법
  • asnyc/await 는 실제로는 최상위에 위치한 promise에 대해서 사용
  • Asnyc/await는 plain callback 이나 node callback과 함께 사용 불가능
  • async/await는 promise처럼 non-blocking 으로 실행
  • async/await는 비동기 코드의 겉모습과 동작을 좀 더 동기 코드와 유사하게 만들어 준다

async/await vs promise

const makeRequest = () =>
  getJSON()
    .then(data => {
      console.log(data)
      return "done"
    })

makeRequest()

const makeRequest = async () => {
  console.log(await getJSON())
  return "done"
}

makeRequest()

async/await Cons

간결함과 깔끔함

.then 을 추가할 필요가 없다

response 를 해결하기 위한 비동기 함수를 만들 필요가없다

data란 이름의 변수를 사용할 필요도 없고

nesting도 없다!

async/await vs generator

라이브 코딩

22. Generator and Async Await

By hoonnotes

22. Generator and Async Await

  • 73