标签:引入 多次 返回 reject 加工 defer 对象 The jquery
var wait = function(){ var task = function(){ console.log(‘执行完成‘); } setTimeout(task, 2000); } wait();
现在在task里面的执行完成之后进行某些特别复杂的操作,代码可能会很多。那么要这么怎么办。如果继续在下面写也没有问题,但是不符合开放封闭的原则。后面很有可能多次再改这一大堆的代码。对修改开放,对拓展关闭。我们需要实现对修改关闭,对拓展开放。
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可分成两类,用意不同
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‘) });
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‘) });
标签:引入 多次 返回 reject 加工 defer 对象 The jquery
原文地址:https://www.cnblogs.com/wzndkj/p/10987549.html