Użycie jQuery.Deferred w celu uniknięcia zagnieżdżonych wywołań zwrotnych setTimeout

setTimeout ->
  console.log 'foo'
  setTimeout ->
    console.log 'bar'
    setTimeout ->
      console.log 'baz'
    , 1000
  , 1000
, 1000

Czy możliwe jest osiągnięcie tego samego wyniku z jQuery.Deferred? Może coś takiego:

someFunction()
.then(-> console.log 'foo')
.then(delay 1000)
.then(-> console.log 'bar')
.then(delay 1000)
.then(-> console.log 'baz')

Być może mylę się w obietnicach dotyczących myślenia, które ułatwiają pisanie:Wykonaj A, a następnie raz zakończ, wykonaj B, a następnie raz zakończ, C.

questionAnswers(2)

yourAnswerToTheQuestion