关于Deferred应用原理 待整理

关于Deferred应用原理 待整理

//1
// $.ajax(“test.html”)
// .done(function(){ alert(“哈哈,成功了!”); })
// .fail(function(){ alert(“出错啦!”); })
// .done(function () {
// alert(‘2’)
// });
//2
// $.when($.ajax(‘test1.html’), $.ajax(‘test2.html’))
// .done(function(){ alert(“哈哈,成功了!”); })
// .fail(function(){ alert(“出错啦!”); });
//3
// var wait = function(){
// var tasks = function () {
// alert(‘执行完毕’);
// }
// setTimeout(tasks, 5000)
// };
// $.when(wait())
//
// .done(function(){ alert(“哈哈,成功了!”); })
//
// .fail(function(){ alert(“出错啦!”); });
//4
// var dtd = $.Deferred();
// var wait = function(dtd){
// var tasks = function () {
// alert(‘执行完毕’);
// // dtd.resolve(); //修改def的状态为 已完成
// dtd.reject();//修改状态为 已失败
// }
// setTimeout(tasks, 5000)
// return dtd;//返回dtd
// };
// 如果执行状态是”已完成”(resolved),deferred对象立刻调用done()方法指定的回调函数;如果执行状态是”已失败”,调用fail()方法指定的回调函数;如果执行状态是”未完成”,则继续等待,或者调用progress()方法指定的回调函数
// $.when(wait(dtd))
// .done(function(){ alert(“哈哈,成功了!”); })
// .fail(function(){ alert(“出错啦!”); });

//5,还有个问题 dtd为全局变量,可以外部执行,为了解决这个问题,提供了deferred.promise();它的作用是,在原来的deferred对象上返回另一个deferred对象,后者只开放与改变执行状态无关的方法(比如done()方法和fail()方法),屏蔽与改变执行状态有关的方法(比如resolve()方法和reject()方法),从而使得执行状态不能被改变。
// dtd.resolve();
// var dtd = $.Deferred(); // 新建一个Deferred对象
// var wait = function(dtd){
// var tasks = function(){
// alert(“执行完毕!”);
// dtd.resolve(); // 改变Deferred对象的执行状态
// };
// setTimeout(tasks,5000);
// return dtd.promise(); // 返回promise对象
// };
// var d = wait(dtd); // 新建一个d对象,改为对这个对象进行操作
// $.when(d)
// .done(function(){ alert(“哈哈,成功了!”); })
// .fail(function(){ alert(“出错啦!”); });
// d.resolve(); // 此时,这个语句是无效的
//6,最终写法
// var wait = function(dtd){
// var dtd = $.Deferred(); //在函数内部,新建一个Deferred对象
// var tasks = function(){
// alert(“执行完毕!”);
// dtd.resolve(); // 改变Deferred对象的执行状态
// };
// setTimeout(tasks,5000);
// return dtd.promise(); // 返回promise对象
// };
// $.when(wait())
// .done(function(){ alert(“哈哈,成功了!”); })
// .fail(function(){ alert(“出错啦!”); });
//另一种写法
// var wait = function(dtd){
// var tasks = function(){
// alert(“执行完毕!”);
// dtd.resolve(); // 改变Deferred对象的执行状态
//
// };
// setTimeout(tasks,5000);
// return dtd.promise();
//
// };
// $.Deferred(wait)
// .done(function(){ alert(“哈哈,成功了!”); })
// .fail(function(){ alert(“出错啦!”); });
//另一种写法
// var dtd = $.Deferred(); // 生成Deferred对象
// var wait = function(dtd){
// var tasks = function(){
// alert(“执行完毕!”);
// dtd.resolve(); // 改变Deferred对象的执行状态
// };
// setTimeout(tasks,000);
// };
// dtd.promise(wait);
// wait.done(function(){ alert(“哈哈,成功了!”); })
// .fail(function(){ alert(“出错啦!”); });
// wait(dtd);
//then的用法
// $.when($.ajax( “/main.php” ))
//
// .then(successFunc, failureFunc ); //第一个是done,第二个是fail
//deferred.always //不管resolve还是reject
// $.ajax( “test.html” )
// .always( function() { alert(“已执行!”);} );

发表评论