zoukankan      html  css  js  c++  java
  • jquery中的deferred

    熟悉的东西,长时间不用很快也就忘了,挺多还蛮可惜的。。

    deferred之前用过不少次,这次心血来潮总结一下,主要还是参考阮老师的这篇文章。

    deferred对象被jquery推出,作为操作回调的一种方式。

    譬如ajax请求,如果想在请求成功后执行某些操作,比较常见的方法是在配置中定义好`success()`回调函数。

    如果利用$.ajax的deferred方式,$.ajax()会返回一个deferred对象,在该对象后串联需要进行操作,被链入的操作并不会立刻执行,而是在被推迟到特定条件情况下才会触发

    • done:被done串联的操作在deferred对象执行成功后被执行
    • fail:失败时被执行
    • always:操作结束总会执行
    • then:done和fail的结合,作为一种简写方式

    如:

    $.ajax("test.html")
    

      .done(function(){ alert("哈哈,成功了!"); })

      .fail(function(){ alert("出错啦!"); });

    之所以称为deferred,应该就是因为这种推迟执行的特性所致。

    不单单利用jquery已经封装好的deferred组件,也可以自己创建deferred组件,在合适的时机触发成功或失败,从而达到回调的特性。

    一个可能在很多地方都见过的例子,通过deferred对象,在外部监控某操作执行完后,进行相应操作:

    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("出错啦!"); });

    • 通过$.Deferred()可以创建deferred对象(假设对象名为dtd)
    • 通过dtd.resolve()可以触发成功事件,dtd.reject()则为失败
    • dtd.promise()返回一个仅支持done/fail等回调监控的promise对象,该对象屏蔽了resolve/reject等改变状态的方法
    • $.when(dtds...)该方法可以监控多个deferred对象,当都成功时才会触发done,而有一个失败时既会触发fail
  • 相关阅读:
    zabbix之自定义告警
    Appium获取toast消息
    fiddler在小米8下抓取https数据包.
    shell 获取指定ip的丢包率
    打造个人多媒体服务器之二
    关于pycharm+opencv没有代码提示的问题解决方法记录
    chrome出现“由贵单位管理”原因及解决方法
    jQuery 页面加载后执行的事件(3 种方式)
    VSCode
    2019.7月-前端面试总结(H5+C3+JS+ES6+Vue+浏览器)
  • 原文地址:https://www.cnblogs.com/mosakashaka/p/12608077.html
Copyright © 2011-2022 走看看