队列篇补充:$().promise()的使用
发布在# 菜鸟解读 jQuery #2014年5月27日view:2871
在文章任何区域双击击即可给文章添加【评注】!浮到评注点上可以查看详情。

本篇属于补充,篇幅短小
介绍下关于之前没有提到过的 $().promise;
$().promise 的作用是可以管理多个对象的队列都执行完毕后再执行的一些操作
本篇只是讲解下用法和逻辑流程,先来看个例子:

var obj1 = { name:'obj1' };
var obj2 = { name:'obj2' };
var $objArr = $([obj1,obj2]);
//为两个对象均添加了各自的事件触发器
$objArr.queue('say',[function(next){
    console.log( 'first handle fn : '+this.name );
    next();
},function(){
    console.log( 'second handle fn : '+this.name );
}]);
$objArr.promise('say').done(function(){
    console.log('All functions are executed');
});
//触发 obj1 的事件
$.dequeue(obj1,'say');
//触发 obj2 的队列
$.dequeue(obj2,'say');
//在执行完obj2的队列后 "All functions are executed"就会出现

$().promise 的工作原理是这样的:
创建一个 jQuery.Deferred() 对象[最后用于返回的对象],
设定一个计数器变量count,
然后遍历jQ对象,为各元素绑定一个内部数据 type+"defer" : $.Callbacks( "once memory" ),
然后向这个callbacks对象内添加一个函数[resolve],resolve用来控制count进行减法操作
[当count为0的时候,触发deferred对象的resolveWith,这样在外面我们就可以使用done来添加控制函数]
在触发元素的各自的队列时,会进行检测,
如果是队列的最后一个回调,执行其身上的 type+"defer" 对象的fire[也就相当于执行了resolve]

感谢您的阅读,欢迎留言:交流,提问,斧正;

评论
发表评论
暂无评论
WRITTEN BY
前端狮子
JS前端开发工程师 :喜欢研究js,nodejs,html5; 希望结交更多朋友~
TA的新浪微博
PUBLISHED IN
# 菜鸟解读 jQuery #

本栏解读的jQ为1.7.2版本。 本人也是刚开始读起源码,在这里分享下成长的心得。 本人能力有限,也是接触JS不久的初学者,定会有不少解析不全不够明朗【甚至BUG】的地方, 希望各位牛牛多多留言斧正 感谢阅读 ps:由于工作不定时繁忙,本人也无法定期更新,但是会尽量抽时间学习,分享给大家

我的收藏