Query Deferred主是是为了解决异步而生。也许我们对于Deferred可能不熟悉,但是我们必定对promise熟悉,这两着之间有紧密的联系又或者说deffered包含promise的所有方法,但是为什么还会有promise呢?我们接下来会介绍。
我们来看源码:

我们可以看到这是一个工厂函数,结果返回一个组装成的对像deferred,那么接下来我们看一下这个返回的deferred对像都有哪些方法。
// Add list-specific methods
jQuery.each( tuples, function( i, tuple ) {
var list = tuple[ 2 ],
stateString = tuple[ 3 ];
// promise[ done | fail | progress ] = list.add
promise[ tuple[1] ] = list.add;
// Handle state
if ( stateString ) {
list.add(function() {
// state = [ resolved | rejected ]
state = stateString;
// [ reject_list | resolve_list ].disable; progress_list.lock
}, tuples[ i ^ 1 ][ 2 ].disable, tuples[ 2 ][ 2 ].lock );
}
// deferred[ resolve | reject | notify ]
deferred[ tuple[0] ] = function() {
deferred[ tuple[0] + "With" ]( this === deferred ? promise : this, arguments );
return this;
};
deferred[ tuple[0] + "With" ] = list.fireWith;
});
这里遍历了tuples对像实现了:
- list对像等于二维数组tuples中的callbacks对像
- promise对像添加了三个方法done,fail,progress且都等于callbacks的add方法
- stateString等于状态“resolved”或“rejected”
- deferred对像添加了6个方法resolve,reject,notify,resolveWith,rejectWith,notifyWith且等于callbacks的 fireWith方法

接下来有一句代码是'promise.promise( deferred )';这句代码是把promise对像所有的方法赋给deferred对像

我们看到promise是不是没有触发执行的方法啊,所以它在是改变不了状态的,所以我们一般是用promise做异步编程的工作的。
本文深入探讨了jQuery Deferred和Promise之间的联系与区别,详细解释了Deferred如何通过工厂函数实现,以及其内部方法如何实现与Promise的交互。重点阐述了两者在异步编程中的应用与特性对比。
483

被折叠的 条评论
为什么被折叠?



