前言

jQuery 在 1.5 的版本時,推出了 Deferred Object,我覺得這是很有特色的 utility object,Deferred Object 是由 Promise Object 加上一些 Method 組成的,最常使用在非同步的狀況,與 AJAX call 搭配簡直是絕配。

簡介

建立預設的 Deferred Object:

var dfd = $.Deferred();  // 要加上 new 也可以 new $.Deferred();

建立帶參數的 Deferred Object:

var dfd = $.Deferred(function(dfd) {

console.log('Hello! Deferred');

});

Deferred Object 的狀態可分成三種

1. Pending: Operation 處理中

2. Resolve: Operation 處理成功

3. Reject: Operation 處理失敗

var dfd = $.Deferred();

dfd.state();  // "pending"

dfd.resolve();

dfd.state();  // "resolved"

dfd.reject(); // no effect, because the Promise 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

arrow
arrow
    全站熱搜

    zack9433 發表在 痞客邦 留言(0) 人氣()