coffeescript async await 구현

in kr •  7 years ago 

Promise 에서 직렬로 순차대로 실행하는 것은 쉽지 않다.
이런 경우엔 coroutine이 적절한데 async/await으로 할 수 있다.
javascript에 비해 coffeescript 2.0은 await 지원이 깔끔한 편이다.

sleep = (ms) ->
  new Promise (resolve) ->
    setTimeout resolve, ms
say = (text) -> console.log text
countdown = (seconds) ->
  for i in [seconds..1]
    say i
    await sleep 1000
  say "Blast off"

countdown 3

똑같이 ECMA7으로 구현하면

sleep = ms =>
  new Promise(resolve => 
    setTimeout(resolve, ms)
  )
say = text => console.log(text);
countdown = async seconds => {
  for(let i=seconds; i> 0; i--) {
    say(i);
    await sleep(1000);
  }
  say("Blast off");
}
countdown(3);

이와 같다.

병렬로 쏴보내는 건 Promise.all 로 직렬은 Async 를 쓰면 편하다.

Authors get paid when people like you upvote their post.
If you enjoyed what you read here, create your account today and start earning FREE STEEM!
Sort Order:  

최근에 async 를 쓸일이 있었는데, 꽤 편리합니다.
async 는 generator 로 변환된다고 하는데, 그 과정이 이해가 안되는 것이 문제군요... ^^

Loading...