よくある感じの非同期な関数を順番に実行するクラス書いた.
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では必ずインデント深くなる.