1、是否用过jQuery的deffered
2、使用jQuery Defered
3、初步引入promise概念
var ajax=$.ajax({
url:'./data.json',
success:function(){
console.log('success 1')
console.log('success 2')
console.log('success 3')
},
error:function(){
console.log('error')
}
})
var ajax= $.ajax('./data.json')
ajax.done(function(){
console.log('success 1')
}).fail(function(){
console.log('fail 1')
}).done(function(){
console.log('success 2')
}).fail(function(){
console.log('fail 2')
}).done(function(){
console.log('success 3')
}).fail(function(){
console.log('fail 3')
})//对扩展开放,对修改封闭
链式操作
返回的是一个deferred对象.then(成功后,失败后),promise原来是jquery提出来的
jquery无法改变js异步和单线程的本质
var ajax= $.ajax('./data.json')
ajax.then(function(){
console.log('success 100')
},function(){
console.log('fail 100')
}).then(function(){
console.log('success 200')
},function(){
console.log('fail 200')
}).then(function(){
console.log('success 300')
},function(){
console.log('fail 300')
})
只能从写法中杜绝callback这种形式
解耦了代码,也就是分到很多个函数中,并且顺序不会乱
js设计原则
js设计模式
开放封闭原则,只需要再加一个.加一个函数就行。
1、多人开发时,只需关注自己的即可,不互相干扰
2、原有的代码,所有的工程师都要测试一遍,回归测试的时候,知识扩展了一个新的函数,只需要修改新的函数即可
3、有的代码没改,只需测试扩展的方法即可
对修改开放了,对扩展封闭了
不需要修改任何内容,只需要扩展上就可以了
普通的异步处理
var wait =function(){
var task =function(){
console.log('执行完成')
}
setTimeout(task,2000)
}
wait()
jquery的异步处理
function waitHandle(){
var dtd= $.Deferred()
var wait =function(dtd){
var task=function(){
console.log('执行完成')
dtd.resolve()
//dtd.reject()
}
setTimeout(task,2000)
return dtd
}
return wait(dtd)
}
var w=waitHandle()
w.then (function(){
console.log('ok 1')
},function(){
console.log('err 1')
})
dtd的API可分为俩类,
第一类:resolve reject//执行成功,执行失败主动触发
第二类:.then .done .fail,被动监听
function waitHandle(){
var dtd= $.Deferred()
var wait =function(dtd){
var task=function(){
console.log('执行完成')
dtd.resolve()
}
setTimeout(task,1000)
return dtd.promise()
}
return wait(dtd)
}
var w=waitHandle()
$.when(w).then(function(){
console.log('ok 1')
}).then (function(){
console.log('ok 2')
})//用jquery自己封装的promise
1、可以jQuery1.5对ajax的改变举例
2、说明简单的封装、使用deferred
开放封闭原则
3、说明promise和deferred的区别
deferred对象有resolve、reject这种主动创造函数,也有done,then,fail这种被动监听,很容易被篡改,promise可以被动监听,没有权利主动修改