$.Deferred
var wait = function(dtd){
var tasks = function(){
console.log('OK');
dtd.resolve();
};
setTimeout(tasks,5000);
return dtd.promise();
};
$.Deferred(wait)
.done(function(){
console.log('success');
})
.fail(function(){
console.log('faile');
});
事件观察者模式:
var PubSub = {
handlers:{},
on :function(eventType,handler){
if(!(eventType in this.handlers)){
this.handlers[eventType] = [];
}
this.handlers[eventType].push(handler);
return this;
},
emit :function(eventType){
var args = Array.prototype.slice.call(arguments,1);
for(var i= 0,l=this.handlers[eventType].length;i<l;i++){
this.handlers[eventType][i].apply(this,args);
}
return this;
}
};
get请求
$.get('/asyncdata/userInfo',function(){
console.log('success1');
});
$.when($.get('/asyncdata/userInfo')).done(function(){
console.log('aasfsafsafatest')
});
上面这行代码与使用回调的写法是一样的
function c(){
console.log('4444444');
}
function b(c){
$.get('/asyncdata/userInfo',c);
}
b(c);
这个也是一样的
var fetchingData = $.get('/asyncdata/userInfo');
fetchingData.done(function(){
console.log('success')
});
fetchingData.fail(function(){
console.log('fail')
});
Deferred对象:
var promptDeferred = new $.Deferred();
promptDeferred.always(function(){ //扔到事件队列里去,等遇到Deferred对象执行reject或resolve方法时再去执行
console.log('11111111')
});
promptDeferred.done(function(){ //扔到事件队列里去,等遇到Deferred对象执行reject方法时再去执行
console.log('22222222')
});
promptDeferred.fail(function(){ //扔到事件队列里去,等遇到Deferred对象执行resolve方法时再去执行
console.log('3333333333')
});
promptDeferred.progress(function(){ //扔到事件队列里去,等遇到Deferred对象执行resolve方法时再去执行
console.log('44445555')
});
Deferred就是Promis,更准确地说,Deferred是Promise的超集,它比promis多了一项关键特性:可以直接触发。
使用resolve(执行)或reject(拒绝)方法;
通俗一点讲也就是Deferred对象与Promis对象的区别在于:Deferred对象拥有resolve(执行)或reject(拒绝)这两个方法,而Promis对象是不具有这两个方法的。
promptDeferred.notify(); //触发progress事件
promptDeferred.reject(); //触发always与fail事件
promptDeferred.resolve(); //触发always与done事件
promise对象:
var promise = $.get('/mydata');
promise.done(function(){ //扔到事件队列里去,等文件的所有代码运行完成之后再去执行
console.log('onSuccess');
});
promise.always(function(){ //扔到事件队列里去,等文件的所有代码运行完成之后再去执行
console.log('always');
});
promise.fail(function(){ //扔到事件队列里去,等文件的所有代码运行完成之后再去执行
console.log('onFailure');
});
var errorPromise = $('.error').fadeIn().promise();
errorPromise.done(function(){ //promise对象等待fadeIn方法执行完成时就执行done事件
console.log('error')
}); //fadeIn执行完成后会自动执行done方法;
var slideUpDeferred = new $.Deferred();
$('.menu').slideUp(slideUpDeferred.resolve); //slideUp执行完成后会由resolve去执行Deferred对象的done或always方法;
onReady事件:
$(onReady);
$(document).ready(onReady);
$.ready.promise().done(onReady);
Deferred对象:
var aDreamDeferred = new $.Deferred();
aDreamDeferred.done(function(subject){ //扔到事件队列里去不直接执行,直到碰到resolve事件时再去执行
console.log(subject);
});
aDreamDeferred.resolve('the JS event model'); //执行done事件
var timing = new $.Deferred();
timing.done(function(data){
console.log(data);
});
$.get('/asyncdata/userInfo',timing.resolve('data'));
$.ajax
function getReslut(){
$.ajax('/asyncdata/userInfo')
.done(function(){
console.log('111111111');
})
.fail(function(){
console.log('66666666')
})
.done(function(data){
console.log(data)
})
}
getReslut();
$.when
var wait = function(){
var tasks = function(){
console.log('OK');
};
setTimeout(tasks,5000);
};
$.when(wait())
.done(function(){ //直接运行最后才运行tasks
console.log('success');
})
.fail(function(){
console.log('faile');
});