浅析jquery1.5之Deferred

本文详细介绍了jQuery 1.5中引入的Deferred对象,该对象极大简化了异步操作的处理流程。通过实例展示了Deferred如何整合到AJAX请求及DOM加载完成后的回调处理中,并解释了其内部实现原理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

    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.


 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值