LoginSignup
2
2

More than 5 years have passed since last update.

promise.fail()の登録が行われなかった場合用の処理

Posted at

jQuery.ajax()でエラーだったら画面で通知したいけど、一部の通信については正常系で失敗するパターンがある(ログイン情報が401で未ログインと判断とか)ので、そのときは普通のエラー処理したくない。そんなとき。

// 初期の失敗時コールバックを登録
var handled = false;
p.fail(function() {
    // 失敗時制御済みでなければコールバック実行
    if (!handled) {
        return onfail.apply(this, arguments);
    }
});

// 失敗時コールバック登録処理を上書き、
// 一度でも呼び出しがあれば制御フラグをonにする
var _org_fail = p.fail;
p.fail = function(callback) {
    handled = true;
    // 処理を戻し、正規の登録処理も行う
    p.fail = _org_fail;
    return p.fail(callback);
};

デモ:

うーんなんかこんなやり方になる設計がダサい気もしないでもない。

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2