[僕] setTimeout と arguments.callee で、$.ajax() を retry する

僕ト云フ事

たろマークはてなブックマーク

2012年06月06日

[javascript][jquery] setTimeout と arguments.callee で、$.ajax() を retry する

昨日、jQuery の $.ajax() の実行が失敗したときに、少しまってから retry させたかったんだけど、その方法が分からずはまったのでメモ。

arguments.calleeとsetTimeoutを使ってJavaScriptのリトライ処理を簡単に書く方法 | さくらたんどっとびーず を参考にした。


(function() {
    var callee = arguments.callee;
    $.ajax({
        url: 'http://example.com/api/hoge',
        error: function () {
            setTimeout(callee, 1000);
        }
    });
})();

$.ajax() は、処理に失敗したときに error に渡した関数が callback されるようになっているので、そこで setTimeout を使う。この例では 1000ms 待ってから retry する

arguments.callee は何か、と言うとどうも呼び出した関数そのものが入ってるらしい。

calleeプロパティ - Argumentsクラス - JavaScript入門

再帰呼び出しをこんな感じでできる。


var factorial  = function (n) {
  if (n == 0){
    return 1;
  }else{
    return n * arguments.callee(n - 1);
  }
};

factorial(3) // => 6

名前がある関数だと、そのままその名前呼べばいいか、と言うことをこれ書いていて気がついた……。

blog comments powered by Disqus