简单说明 jQuery Deferred Object
建立预设的 Deferred Object:
var dfd = $.Deferred(); // 要加上 new 也可以 new $.Deferred();
建立带参数的 Deferred Object:
var dfd = $.Deferred(function(dfd) { console.log('Hello! Deferred');});
Deferred Object 的状态可分成三种
Pending: Operation 处理中
Resolve: Operation 处理成功
Reject: Operation 处理失败
var dfd = $.Deferred();
dfd.state(); // "pending"
dfd.resolve();
dfd.state(); // "resolved"
dfd.reject(); // no effect, because the dfd was already resolved
Deferred Object 最大的特色在于处理非同步的状况时,所执行的 Callback function 可以指定多个,让程式增加可读性,举一个简单的例子来说明:
$.ajax({ url: 'test', success: function() { console.log('request success!'); }});
一般使用 jQuery 的 AJAX request 大致上如上,但在某些状况下,我希望 Success 的 Callback function 可以指定多个,可以使用 Deferred Object 来达成。
var dfd = $.ajax('test');dfd.done( function() { console.log(' function 1 ');});dfd.done( function() { console.log(' function 2 ');});
另外 Deferred Object 的其他 Method,fail(), always() 也可以指定多个 Callback function