浅析jquery1.5之Deferred

 

    jquery1.5最大的改进是加入了 Deferred, 它的出现 , 使函数的回调方便很多 , 取代了网页加载完成后回调的函数数组 , 与重写后的 ajax 方法的返回实例结合 .

    确切地说,Deferred 是由两个 _Deferred 实例组成 , 一个用于成功解决后的回调 (deferred), 一个用于失败返回后的回调 (failDeferred), 其中 failDeferred 所属函数被改了名字注册入 deferred.

jQuery.Deferred()返回实例deferred.

jQuery.extend(deferred, {
	fail : failDeferred.done,
	rejectWith : failDeferred.resolveWith,
	reject : failDeferred.resolve,
	isRejected : failDeferred.isResolved
})
  

 DOM加载后回调的 readyList 只是一个 _Deferred 的实例 .

_Deferred也只是对于数组的封装 , 可将需要回调的函数注册进入 , 并提供几个可操作的函数

看下面一个例子:


// Create a Deferred and return its Promise
function asyncEvent() {
	var dfd = jQuery.Deferred();
	dfd.done(function() {
		console.info(1)
	}).done([ function() {
		console.info(2)
	}, function() {
		console.info(3)
	} ]).fail(function() {
		console.info(-1)
	});
	setTimeout(function() {
		dfd.resolve("hurray");
	}, 1100);
	setTimeout(function() {
		dfd.reject("sorry");
	}, 1200);
	return dfd.promise(); // 实际上是 dfd 的部分复制 , 也可以返回 dfd, 但不推荐
}
// Attach a done and fail handler for the asyncEvent
$.when(asyncEvent()).then(function(status) {
	console.info(status + ', things are going well');
}, function(status) {
	console.info(status + ', you fail this time');
});
 

 

ajax返回实例与 deferred 结合后 , 可以写成


$.ajax({
url :  "a.html"
}).done( function () { //success either
console.info(1);
}).fail( function () { //error either
console.info(2)
}).complete( function () {
console.info(3)
}) 
 

 

以下是jquery官方对于api的解释

deferred. done ()
Add handlers to be called when the Deferred object is resolved.

deferred.fail()
Add handlers to be called when the Deferred object is rejected.

deferred.isRejected()
Determine whether a Deferred object has been rejected.

deferred.isResolved()
Determine whether a Deferred object has been resolved.

deferred.promise()
Return a Deferred's Promise object.

deferred.reject()
Reject a Deferred object and call any failCallbacks with the given args.

deferred.rejectWith()
Reject a Deferred object and call any failCallbacks with the given context and args.

deferred.resolve()
Resolve a Deferred object and call any doneCallbacks with the given args.

deferred.resolveWith()
Resolve a Deferred object and call any doneCallbacks with the given context and args.

deferred.then()
Add handlers to be called when the Deferred object is resolved or rejected.


 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值