jQuery 中提供了一个Callback的工具类Callbacks,它提供了一个Callback Chain。使用它可以在一个chain上来执行相关操作。它也是jQuery中的ajax, Deferred的基础。我们也可以使用它来构建需要异步执行的组件等。
Callbacks API说明
构造器
jQuery.Callbacks(flags) 创建 Callbacks 对象。
Callbacks 对象里包含了一个 callback function 的数组(也称为 callback chain )。
method说明
add(function|functions) : 将一个或多个 funcation 作为一个 callback function 添加到 callback chain 中。
remove(function|functions) :从 callback chain 中移除指定的 callback function 。
fire(arguments): 触发 callback chain 。 在执行chain 中的每一个 callbakc function 时,参数都是一样的。
fireWith(context,arguments): 在 context 下执行 callback chain 。
disable(): 禁用 Callbacks 。其实是将 chain 设置为 undefined 。所以在禁用后, add() 是添加不成功的,那么 fire 时也就不会有什么操作了。
empty() :只是将 chain 内容清空。
构造器参数
flags:
· unique chain 中的 funcation 是不能重复的。如果重复添加时,是添加不了的。生效于添加阶段(也就是在 add 函数中使用)。
· once 是整个链中的每一个 callback function 都要被执行一次,并且只执行一次。
· memory 保留上一次 fire 时的参数,并记录上一次 fire 时执行到第 n 个 callback function 。在下一次 fire 时,先将上一次未执行的(包括上一次之后,又新加的 callback )执行完毕,然后才开启新一轮执行。
· stopOnFalse 执行一个 callback 时判断执行结果是否为 false ,如果是 false 的话就停止不在执行。
重要流程
Add 一个函数的流程 :
1) 如果有 unique 标志,判断要添加的是否存在,只在不存在时添加到 chain 中。
2) 如果没有 unique 标志,代表可以重复。直接添加到 chain 中。
Fire 的流程:
1) 设置 context
如果没有指定context ,那么 context 值是 Callbacks 对象。
2) 将 chain 中未执行的 functions 执行一遍。在此过程中,每执行完一个就会基于 stopOnFalse 来进行判断(如果设置的话)
3)后置处理
如果 Callbacks 可以多次执行:
如果还有没有执行的参数,再次执行。
否则:(只能执行一次)
如果被 stopOnFalse 了,执行 disable() 。
否则:执行 empty
Demo
<script src="https://code.jquery.com/jquery-1.7.2.js" integrity="sha256-FxfqH96M63WENBok78hchTCDxmChGFlo+/lFIPcZPeI=" crossorigin="anonymous"></script>
<script type="text/javascript">
$(function(){
function fn1(value){
console.log(arguments.length,value);
}
function fn2(value){
return "fn2, " + value;
}
function fn3(value){
fn1(fn2(value));
}
debugger;
var callbacks = jQuery.Callbacks("once memory");
callbacks.add(fn1,fn2,fn3);
callbacks.fire("hello_0")
console.log("--------1-------")
callbacks.add([fn1,fn3]);
callbacks.add(fn2);
callbacks.add(fn3);
callbacks.fire("hello_1");
});
</script>
注:本文内容来自互联网,旨在为开发者提供分享、交流的平台。如有涉及文章版权等事宜,请你联系站长进行处理。