More than 1 year has passed since last update.

setTimeoutを使って複雑な非同期処理を書くのは、タイマーIDの管理が大変でやりたくない。
Deferredオブジェクトならそこら辺うまいこと取り扱えるんで、よくDeferredオブジェクトでsetTimeoutをラップして使う。

$.extend({
    wait: function(duration){
        var dfd = $.Deferred();
        setTimeout(dfd.resolve, duration);
        return dfd;
    }
});

こんな感じで使える

var time = +new Date();

// 1秒待つ
$.wait(1000).done(function(){
    console.log(new Date() - time); //=> 大体 1000
});

// 2秒たったらキャンセルする
var timer = $.wait(3000).fail(function(){
    console.log(new Date() - time); //=> 大体 2000
});
$.wait(2000).done(timer.reject);

// Deferredオブジェクトなので $.when が使える
$.when($.wait(1000), $.wait(2000), $.wait(3000)).done(function(){
    console.log(new Date() - time); //=> 大体 3000
});
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account log in.