2016년 7월 16일 토요일

generator 연습

co 를 손으로 직접 만들어서 재귀를 통해 next() 를 돌려봤다.
결국 fiber 랑 같은 패턴인게 아닌가 싶은데
그래도 순정이니까 좋은 것..
node-fetch는 http request를 하고 promise를 반환형으로 갖는 독특한 라이브러리인데
yield랑 함께 쓸 수 있다.
fetch=require 'node-fetch'
r = (generator)->
  iterator = generator()
  # recurse
  iterate = (iteration)->
    if iteration.done
      iteration.value
    else
      iteration.value.then (x)-> iterate iterator.next x
  iterate iterator.next()
r ->
  uri = "http://jsonplaceholder.typicode.com/posts/1"
  response = yield fetch uri
  json = yield response.json()
  json?.title
.catch (error)-> console.error "ERROR", error.stack
.then (x)-> console.log x