位置: 编程技术 - 正文

jquery延迟对象解析(jquery 延迟对象)

编辑:rootadmin

推荐整理分享jquery延迟对象解析(jquery 延迟对象),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:jquery延迟加载的方式,jquery延迟加载的方式,jquery延迟加载的方式,jquery延迟执行一个函数,jquery延时器,jquery延迟执行一个函数,jquery延迟加载的方式,jquery延迟执行一个函数,内容如对您有帮助,希望把文章链接给更多的朋友!

技术一般水平有限,有什么错的地方,望大家指正。

  ES6已经实现了延迟对象Promise,但是今天主角是JQ里面的延迟对象,套路其实都是差不多的。下面先看一个比较牵强的例子:

  现在先聚焦功能,我们点击add按钮可以看到span元素添加并且颜色变红。然后在看我们代码中的的异类的东西,开始的var dfd = new $.Deferred();以及add事件函数中的dfd.resolve();还有就是最后面的dfd.done(function(){$("span").css("color","red");})。

  $.Deferred()就是我们今天介绍的重点---JQ中的延迟对象,所谓延迟就是在以后的某段事件可以运行。我们看上面的代码的一个处理流程,在上面的代码中我们调用新建的延迟对象的dfd.done()方法的参数位置传递了一个匿名函数表达式,在点击事件的处理函数执行时调用dfd.resolve(),之后我们写在dfd.done()里面的匿名函数就执行了,在这个过程中我们可以看做,dfd把done里面的函数放在resolve的位置了。dfd就是延迟对象,很明显它可以改变函数的执行顺序。

  在看上面的这段代码你仔细一想就会发现有个毛用啊,我们把改变颜色的代码放在一个函数里面,点击的时候调用这个函数不就好了,写这么麻烦有个鸟用。其实延迟对象最多的是应用在AJAX中。上面的代码我们点击add之后我们在点击remove然后在点击add这时候发现这次的字没有变成红色,这是因为延迟对象的状态变化之后就失效了,说白了就是一次性的。

延迟对象使用

  JQ为我们实现了延迟对象的功能,我们一般称为Deferred或者Promise,基本上是一个东西,确切的说Promise是从Deferred中派生的一个子类。

  我们在使用的时候首先就是创建一个延迟对象:var dfd = new $.Deferred()。

  延迟对象dfd有三种状态分别为pending,resolved,rejected,我们可以通过对dfd对象使用state方法来查看此时的状态:dfd.state()。

  dfd在创建出来之后他的状态为pending,调用resolve方法之后:dfd.resolve()它的状态就会变为resolved然后会执行dfd.done()里面的函数,dfd调用reject方法之后:dfd.reject()它的状体就会变为rejected然后会执行dfd.fail()里面的方法,并且dfd对象在从pending变为resolved或者rejected之后就不会再发生任何变化,这也就是我们上面的代码为什么只能在第一次点击之后的文字是红的的原因。

  我们在来看一看开始的代码,我们的dfd.done()中定义了字体变红的函数,在点击函数执行后dfd调用resolve,之后dfd的状态从pending变为resolved会执行done里面的方法继而颜色变红。

  dfd.resolve()和dfd.done()之间是可以进行参数传递的,现在我们对开始的代码做一些修改:

  我们在点击之后字体颜色变为绿色了。

jquery延迟对象解析(jquery 延迟对象)

  另外dfd还有另外一个函数always:dfd.always(),dfd的状态从pending变为哪个状态always里面的函数都会执行。

  dfd的每一个方法都会返回一个延迟对象,所以done,fail,always都是可以有多个的,可以直接写成链式调用:

dfd.done(function(){}).done(function(){}).fail(function(){});

  dfd的无论哪个API都可以写多个,这时候我们就可能会考虑它的执行顺序能不能保证。这点我们完全可以放心,dfd的函数执行的顺序是完全没有问题的按照我们书写的顺序执行,看下面的代码:

  第一个函数添加元素,第二个函数改变添加元素的颜色。

  无论什么时候dfd三个API里面的函数都会在dfd的状态从pending变化之后才能执行,在异步的情况下如此,在同步的情况下也是。更确切的说dfd在调用dfd.resolve()之后已经执行过的done的里面的函数会立即执行,对于dfd.resolve()后面的done来说当程序走到它那时才会执行:

延迟对象示例

  最开始我们使用JQ的AJAX的时候我们通常的写法是:

  在1.5(好像是这个版本~)之后AJAX会返回一个Promise对象,继而我们可以写成下面这种:

  看起来更骚气了一点,而且这我们还可以在加多个.done(function(){}),每个done处理不同的事情这样看起来比较清晰。

  已经知道延迟对象可以改变代码的执行顺序,假如我们又下面的代码:

  我们会发现嵌套的有点多了,我们就可以利用延迟对象让他看起来更加好看一点:

  没有延迟对象我们一样能完成需要的功能,此时我们就需要一层一层嵌套我们处理过程了,而有了延迟对象我们就可以避免这种事了,他可以轻松控制代码的执行顺序,让代码看起来更请清晰。你可能会说我封装函数在合适的地方调不就行了,如果自己看自己写的代码没问题,但是换一个人他的滚动条可能就一直上上下下了。

  延迟对象的里一个作用就是可以合并AJAX的调用,比如一个接口取数据A另一个接口取数据B,AB都取到之后我们在利用这些数据做一些喜欢做的事,我们就可以利用延迟对象轻松实现。此时我们就可以利用JQ的$.when()来实现。$.when()就跟他的名字一样-当什么的时候-,他的参数可以是Promise对象,也可以是字符串(很少遇到不在介绍),他的返回结果也是一个Promise对象,下面看一个小例子:

  allData是保存所有数据的一个集合,dataA是第一个AJAX返回的Promise对象,dataB是第二个。$.when()的done方法执行的唯一条件就是dataA和dataB都执行成功。

  补充:dfd还有一对组合就是notify+progress当dfd对象的状态处于pending时可以调用dfd.nothfy(),调用之后dfd.progress()里面的函数会执行,只要dfd处于pending状态dfd.notify()就可以一直调用,同样也可以传递参数。

jquery移除了live()、die(),新版事件绑定on()、off()的方法 我蛋疼了快分钟,怎么调用都是报错,最后一查,原来jquery已经移除了live()和die()方法。使用了新的事件绑定方法on()、解除绑定方法off().新的绑定方法

浅谈jquery之on()绑定事件和off()解除绑定事件 off()函数用于移除元素上绑定的一个或多个事件的事件处理函数。off()函数主要用于解除由on()函数绑定的事件处理函数。该函数属于jQuery对象(实例)。语

jQuery的ready方法实现原理分析 jQuery中的ready方法实现了当页面加载完成后才执行的效果,但他并不是window.onload或者doucment.onload的封装,而是使用标准W3C浏览器DOM隐藏api和IE浏览器缺陷

标签: jquery 延迟对象

本文链接地址:https://www.jiuchutong.com/biancheng/379364.html 转载请保留说明!

上一篇:关于Jquery中的bind(),on()绑定事件方式总结(关于jQuery中的DOM操作,下列哪种方法用来复制元素?)

下一篇:jquery移除了live()、die(),新版事件绑定on()、off()的方法(jquery移出class)

  • 计提增值税会计科目是什么
  • 湖南个税申报系统app
  • 计提工会经费的科目
  • 支付给个人的佣金费用需要发票吗
  • 原材料盘亏自然损耗
  • 交易性金融资产借贷方向
  • 电子承兑汇票接收和转出步骤
  • 未收回质保金是否需要交纳增值税呢?
  • 租地协调费没发票怎么入账?
  • 使用空头支票被银行冻结
  • 地税保险单位编号是什么
  • 专业合作社的业务范围
  • 出口退税和企业所得税
  • 购入厂房时缴的土地增值税如何入账?
  • 土地证是商业用地
  • 一般纳税人可以不交增值税吗
  • 增值税扣税凭证抵减销项税额
  • 外购公司的长期投资如何做账
  • 税票认证节假日可以顺延吗?
  • 卖护肤品赚钱吗
  • 事业单位个税手续费返还需要上缴财政吗
  • 如何整理流水账目
  • 公司名下汽车过户给个人
  • macOSCatalina10.15.5正式版值得升级吗 macOSCatalina10.15.5更新了什么
  • 胆固醇为什么会高
  • 账簿启用及交接表样图
  • php工程师职位描述
  • fpx是什么文件
  • chcfg.exe是什么
  • 只有收据没有发票是不是逃税
  • 向银行借入的资金属于什么
  • 小规模纳税人交增值税吗
  • php array_search二维数组
  • 媒体查询是什么
  • vue3快速入门
  • chkdsk.exe/f命令
  • 超市电子发票怎么开
  • 购进免税农产品进项税额转出
  • 提供加工劳务怎么开票
  • 合同发票收款付款管理系统源码
  • 茶叶一般开多少度保存
  • 长期股权投资的明细科目有哪些
  • 销售应税消费品缴纳的消费税计入
  • 可供出售金融资产名词解释
  • 对外销售产品会计分录
  • 发票冲红后税款一定会退回吗
  • 契税应该计入税金及附加吗
  • 土地出让金进项税怎么算
  • 暂估入库后发票来不了
  • 计提了坏账准备就要计算递延所得税资产
  • 公司购买防疫物资的申请
  • 营改增适用范围
  • 分支机构企业所得税计提和缴纳数额不一致怎么办?
  • 筹建期间取得的利息收入 企业所得税
  • 个体户银行开户所需资料
  • 个人银行帐户可以代理销户吗?
  • xp怎么解压文件
  • 纸嫁衣6第四章攻略全文图解
  • 老毛桃2013 U盘启动盘和重装系统图文教程
  • mac怎么安装字体到ai
  • windows注销登录会怎样
  • windowsxpwifi
  • linux中grep命令用法
  • win7系统怎么关闭屏幕保护
  • 猫的所有视频
  • java中遍历数组的方法
  • [置顶]bilinovel
  • react jss
  • jquery keydown
  • vue购物车功能
  • js字符串的操作方法
  • javascript判断浏览器
  • 基于unity的游戏开发
  • jquery移动端ui框架
  • javascript基础书
  • 安卓多点触屏在哪里设置
  • 对于python程序,对代码缩进的要求非常严格
  • 国家税务局什么时候放假
  • 天津市各区国税局待遇一样吗?
  • 小规模六税两费减免分录
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设