很久之前我就意识到很多时候我们都需要控制一下这个jq方法的执行顺序,或者是遇到了嵌套地狱,无法复用的问题
多方查找后找到了 Deferred(从jQuery 1.5.0版本开始引入的一个新功能)
简单说一下使用方法:
首先注册var def = $.Deferred();
注册后var prs1 = def.then(自定义函数);
var prs2 = prs1.then(自定义函数); prs1函数执行完毕执行prs2函数
最后还需要触发这个注册 def.resolve("0");
即可
如上所述就可以控制程序的运行顺序了
简单说一下jq这部分的原理
deferred对象是一个延迟对象,意思是函数延迟到某个点才开始执行,改变执行状态的方法有两个(成功:resolve和失败:reject),分别对应两种执行回调(成功回调函数:done和失败回调函数fail)
deferred对象的多种方法,下面给大家总结一下啊:
(1) $.Deferred() 生成一个deferred对象。
(2) deferred.done() 指定操作成功时的回调函数
(3) deferred.fail() 指定操作失败时的回调函数
(4) deferred.promise() 没有参数时,返回一个新的deferred对象,该对象的运行状态无法被改变;接受参数时,作用为在参数对象上部署deferred接口。
(5) deferred.resolve() 手动改变deferred对象的运行状态为"已完成",从而立即触发done()方法。
(6)deferred.reject() 这个方法与deferred.resolve()正好相反,调用后将deferred对象的运行状态变为"已失败",从而立即触发fail()方法。
(7) $.when() 为多个操作指定回调函数。
除了这些方法以外,deferred对象还有二个重要方法,上面的教程中没有涉及到。
有时为了省事,可以把done()和fail()合在一起写,这就是then()方法。
*当然了,这都是阮一峰老师总结的