uzullaがブログ

uzullaがブログです。

簡単なチェーンが欲しかったから書いた

酷い期…じゃなくて非同期web sql databaseとか使ってると、順番に実行するチェーン的な物が欲しくなります。
Differedってのが世の中にはあって、JSDefferedとか、jQueryにも今はDefferedってあるんだけど、まあちょっと大仰でかったるいし、ちょっと値を投げて渡すのが大仰になりそうなので、自分でちょっと書いた。
CoffeeScriptです。

class myChain
    func_queue: []
    index: -1

    chain: (func) ->
        @func_queue.push(func)
        return @

    chainExec: () ->
        @index++
        @func_queue[@index]?.apply(this, arguments);

#--- test
console.log "chain test"

c = new myChain
var0 = 'すがわらさんありがとう'

c.chain( (c,var0)->
    console.log var0
    console.log 1
    setTimeout(
        () ->
            c.chainExec(c)
        3000
    )

).chain( (c)->
    console.log 2
    val1 = 'hello hello'
    c.chainExec(c , val1)
    
).chain( (c, val1)->
    console.log 3
    console.log val1
    c.chainExec(c) #あってもなくてもOK

).chainExec(c,var0)

.apply()教えてくれたすがわらさん超サンキュー!