JavaScript의 generator와 co, koajs
김용균 (@haruair)이상한모임 / Kobe Creations
사실은 다른 발표 주제를 하려고 했는데 시간 내에 마무리 하기 어려울 것 같아서
그래도 이거 편합니다. 써보세요. 몸에 매우 좋은 약
비동기
흐름 제어?
콜백 그냥커피
콜백 그냥커피 프로미스 티*피
프로미스, 만족하십니까?
프로미스 티*피
프로미스 티*피 제너레이터 네*프레소
프로미스 짱짱맨!
중첩 콜백에서 탈출! 순차/병렬 순서 맘대로! 예외 처리!
그런데 저는,
이상하게도 프로미스랑 영 친해지지 못했음 나만 프로미스 축제에 끼지 못한 느낌
* 지극히 개인적인 감상입니다.
코드가 여전히 눈에 잘 들어오지 않는다... 업그레이드된 jQuery?
다시 콜백 예제
이렇게 쓸 수 없습니까?
비동기에서 무슨 짓을? 이러면 에러 안나나요?
제너레이터는 다르다
제너레이터는 다르다!
제너레이터는 이름대로 함수를 생성해주는 함수
무슨 함수를 생성해주나?
여러번 반복해서 호출할 수 있는, 일종의 iterator
`next()`로 호출할 때마다 상태 `done`와 값 `value`을 반환
아... 제너레이터는 중간에 결과를 반환했다가 다시 호출하면 반환한 곳부터 시작하는구나...
아... 제너레이터는 문맥으로 다시 돌아갈 때 next()의 인자로 값을 배정할 수 있구나...
next()
이게 제너레이터의 전부입니다.
이걸 비동기에서 어떻게 써먹을 수 있을까?
아... 제너레이터는 뭔가 복잡하지만 비동기에서 사용할 방법이 있긴 있나보구나
아... 비동기에서 써먹으려면 앞에서 본 로직처럼 뭔가 부수적인 처리가 필요하겠구나
그럼 제너레이터 기본 동작은 아니네요? 앞서 로직을 모두 구현해야 비동기 쓰나요?
존잘님이 다 만들어 두셨습니다.
제너레이터 문법을 사용할 수 있는 control flow tj/co github.com/tj/co
내부적으로 프로미스를 사용해서 구현되어 있음
프로미스로 외쳐Yield!! 그럼 알아서 처리해줄게!!
Yield
간단 예제
.catch()는 어떻게?
.catch()
깔끔한가요?
저만 깔끔한가요? ㅠㅠ
co 기반으로 만든 koa.js github.com/koajs/koa
웹 프레임워크?
웹 프레임워크? HTTP 미들웨어!
가볍다, 쉽다, 간단하다
앞에서 본 co랑 비슷한데 약간 웹을 위한 양념이 있습니다
빠른 데모
빠른 정리
근미래
제너레이터 네*프레소
제너레이터 네*프레소 async/await 초고급커피
ES7에 제안된 async/await
koa도 다음 버전에서 async / await 적용 예정
async
await
멋진 기능을 기대하며 발표는 여기까지
더 재미있는 개발이 되었으면 좋겠습니다
질문이 있다면 망설이지 마세요
김용균이상한모임 / Kobe Creations