コメントアウトしている箇所は正しく動作するのですが、一番下のDeferredインスタンスを利用する方法だと、処理を待たずにdelayメソッドが同時に実行されてしまします。何故なのでしょうか?

delay = (msg)->
  $.Deferred (p)->
    setTimeout ->
      console.log msg
      p.resolve()
    ,1000

#delay('test').done ->
#  delay('test2').done ->
#    delay('test3').done ->

#delay('start')
#.then ->delay(1)
#.then ->delay(2)
#.then ->delay(3)

#$.Deferred().resolve()
#.then ->delay(1)
#.then ->delay(2)
#.then ->delay(3)

d = new $.Deferred()

d.then ->delay(1)
d.then ->delay(2)
d.then ->delay(3)

d.resolve()

http://jsfiddle.net/d9prbjg0/4/