よくある例外処理
try
myfunc()
catch e
console.log "Error:", e
ここで myfunc()
の中でAjaxなどの非同期処理がある場合、その戻り値次第で例外を発生させたい場合があるが、これではキャッチできない。
こういう時は jQuery.Deferred を使う。
myfunc
を
myfunc: () ->
d = new $.Deferred
# Ajaxでなにか呼び出して結果をcallbackに格納
$.get "/nanika", (callback) ->
if callback == 200
# 成功
d.resolve()
else
# 例外
d.reject()
return d.promise()
こんな感にしておけば
promise = myfunc()
promise.done ->
# 成功した場合の処理
promise.fail ->
# 失敗した場合の処理
と書ける。
あと resolve(), reject()
はそれぞれ引数を持つことが出来、done(), fail()
がそれを受け取る。