有多少网站是做废旧信息的,动画片制作教程,wordpress4.2.2,做网站通过什么赚钱吗我们说jquery1.5之后用的用deferred#xff0c;那么deferred到底是个什么东西#xff0c;看个例子var wait function(){var task function(){console.log(执行完成);}setTimeout(task, 2000);
}
wait(); 现在在task里面的执行完成之后进行某些特别复杂的操作#xff0c;代… 我们说jquery1.5之后用的用deferred那么deferred到底是个什么东西看个例子 var wait function(){var task function(){console.log(执行完成);}setTimeout(task, 2000);
}
wait(); 现在在task里面的执行完成之后进行某些特别复杂的操作代码可能会很多。那么要这么怎么办。如果继续在下面写也没有问题但是不符合开放封闭的原则。后面很有可能多次再改这一大堆的代码。对修改开放对拓展关闭。我们需要实现对修改关闭对拓展开放。 为了解决这个问题我们引入jquery的deferred function waitHandle(){var dtd $.Deferred(); // 创建一个deferred对象var wait function(dtd){ // 要求传入一个 deferred对象var task function(){console.log(执行完成);dtd.resolve(); // 表示异步任务已经完成// dtd.reject(); // 表示异步任务失败或出错}setTimeout(task, 2000);return dtd; // 要求返回deferred对席那个}// 注意这里一定要有返回值return wait(dtd);
} 这里面有三层函数第一层函数是waitHandle第二层是wait函数第三层是task函数。这里有两个return第一个传进did。然后进行一系列加工返回了dtd。然后最终怎么用 var w waitHandle();
w.then(function(){console.log(success1);
},function(){console.log(error);
})
.then(function(){console.log(success2)
},function(){console.log(error2)
});
// 还有w.done 和 w.fail 总结dtd的api可分成两类用意不同 第一类dtd.resolve dtd.reject 第二类dtd.then dtd.done dtd.fail 这两类应该分开否则后果很严重 比如在上面代码最后执行dtd.reject()。试一下后果。。 function waitHandle(){var dtd $.Deferred(); // 创建一个deferred对象var wait function(dtd){ // 要求传入一个 deferred对象var task function(){console.log(执行完成);dtd.resolve(); // 表示异步任务已经完成// dtd.reject(); // 表示异步任务失败或出错}setTimeout(task, 2000);return dtd; // 要求返回deferred对席那个}// 注意这里一定要有返回值return wait(dtd);
}var w waitHandle();
w.reject() // 非常不老实的做法
w.then(function(){console.log(success1);
},function(){console.log(error);
}).then(function(){console.log(success2)
},function(){console.log(error2)
}); 那么怎么解决这个问题呢也就引出了最最重要的角色非常类似于promise function waitHandle(){var dtd $.Deferred(); // 创建一个deferred对象var wait function(dtd){ // 要求传入一个 deferred对象var task function(){console.log(执行完成);dtd.resolve(); // 表示异步任务已经完成// dtd.reject(); // 表示异步任务失败或出错}setTimeout(task, 2000);return dtd.promise(); // 这里返回promise而不是直接返回deferred}// 注意这里一定要有返回值return wait(dtd);
}var w waitHandle();
w.then(function(){console.log(success1);
},function(){console.log(error);
}).then(function(){console.log(success2)
},function(){console.log(error2)
}); 虽然这里promise()方法的调用但已经把promise最初的概念提出来了这还是jquery1.5的时候。返回promise以后这个时候去b同学去改w.reject()会报错。返回promise后只能用监听的方法then,done,fail不能去改resolve,reject。监听是其他同学唯一的权利。 转载于:https://www.cnblogs.com/wzndkj/p/10987549.html