hitode909の日記

趣味はマリンスポーツですの日記です

よくある感じの非同期な関数を順番に実行するクラス書いた.

class Worker
  constructor: ->
    @jobs = []

  register: (job) ->
    @jobs.push job

  work: ->
    job = do @jobs.shift
    return unless job
    job => do @work


使い方

worker = new Worker
worker.register (done) ->
  console.log "1 do"
  setTimeout ->
    console.log "1 done"
    do done
  , 1000

worker.register (done) ->
  console.log "2 do"
  setTimeout ->
    console.log "2 done"
    do done
  , 1000

worker.register (done) ->
  console.log "3 do"
  setTimeout ->
    console.log "3 done"
    do done
  , 1000

do worker.work

コールバック地獄,ネストが深くなるの,見た目の問題だけなのか,もっと根本的な問題なのか気になる.見た目が悪いだけなら入れ子にしてもネストが深くならないような言語を作れば解決するのかもしれない.CoffeeScriptでは必ずインデント深くなる.


https://gist.github.com/hitode909/5298455