This is a drawback to how jQuery implements deferreds (I'm assuming
you're using jQuery here -- please correct me if otherwise).
Callbacks do not cause the deferred chain to fail on a thrown
exception. Instead the chain is halted and all remaining resolvers
are never changed in state (deferreds after the one throwing the error
remain in pending state forever).
I would file an issue on CanJS's GitHub about it. This should
reject when a deferred pattern is used.