jQuery deferred.promise() 方法
實例
設定兩個延時時間是隨機的定時器,分別用於解決(resolve)和拒絕(reject)延遲對象
$(function () {
function asyncEvent(){
var dfd = new jQuery.Deferred();
// 在一個隨機的時間間隔之後 Resolve (解決狀態)
setTimeout(function(){
dfd.resolve("歡呼");
}, Math.floor(400+Math.random()*2000));
// 在一個隨機的時間間隔之後 reject (拒絕狀態)
setTimeout(function(){
dfd.reject("對不起");
}, Math.floor(400+Math.random()*2000));
// 每半秒顯示一個"working..."消息
setTimeout(function working(){
if ( dfd.state() === "pending" ) {
dfd.notify("working... ");
setTimeout(working, 500);
}
}, 1);
// 返回 Promise 對象,調用者不能改變延遲對象
return dfd.promise();
}
// 為非同步函數附加一個done, fail, 和 progress 處理程式
$.when( asyncEvent() ).then(
function(status){
alert( status+', 事情進展順利' );
},
function(status){
alert( status+', 這次你失敗了' );
},
function(status){
$("body").append(status);
}
);
})
定義和用法
deferred.promise() 函數返回 Deferred(延遲)的 Promise 對象。
注意:1. 方法允許一個非同步函數阻止那些干涉其內部請求的進度(progress)或狀態(status)的其他代碼。
2. 只包含 deferred 對象的一組方法,包括:done(),then(),fail(),isResolved(), isRejected(), always(), 這些方法只能觀察一個 deferred 的狀態,而無法更改 deferred 對象的內在狀態。
3. deferred.promise()也可以接受一個 target 參數,此時傳入的 target 將被賦予 Promise 的方法,並作為結果返回,而不是創建一個新對象。
語法
deferred.promise( [target ] )
參數 | 描述 |
---|---|
target | Object類型 綁定 promise 方法的對象。 |

更多實例
使用目標參數
使用目標參數,促進現有對象的Promise