0%

jQuery延时对象deferred


简单说,deferred对象就是jQuery的回调函数解决方案。在英语中,defer的意思是”延迟”,所以deferred对象的含义就是”延迟”到未来某个点再执行。

本文只是简单的分享一下学习过程中的心得,具体的内容推荐阅读阮一峰老师的博客 点我跳转

创建jquery延时对象deferred

创建一个延时对象

1
2
3
4
5
var def = $.Deferred(function(deferred){
console.log(deferred);

//传入一个函数,在函数内部写触发事件
})

在函数内部写入触发事件

1
2
3
deferred.notify();   // 调用正在延迟对象上进行的回调函数
deferred.resolve(); // 改变deferred对象的执行状态--成功
deferred.reject(); // 改变deferred对象的执行状态--失败

对应的代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
var def = $.Deferred(function(deferred){

var timer = setInterval(function(){
deferred.notify('请稍后,正在创建中...');
},500);

setTimeout(function(){
clearInterval(timer);

if(Math.random() < 0.5){
var div = document.createElement('div');
div.style.width = '100px';
div.style.height = '100px';
div.style.border = '1px solid black';
document.body.appendChild(div);
deferred.resolve(div);
}else{
deferred.reject('创建失败');
}

},1000);

})

def对象调用方法–用来监听触发事件的执行结果,可以参考ajax

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
// 支持链式调用
def.progress(function(str){

console.log(str);//progress 任务有进度时由 notify 来触发

}).done(function(div){

div.style.backgroundColor = 'red';
alert('创建成功');//done 任务成功时由 resolve 来触发

}).fail(function(str){

alert(str);//fail 任务失败时由 reject 来触发

}).always(function(){

alert('任务结束');//always 无论成功还是失败都会触发

})

以上只是deferred的一些基础知识, 还有一些其他的知识点, 因为能力有限不一一介绍了

-------------本文结束感谢您的阅读-------------
没办法,总要恰饭的嘛~~