JS搞基指南----延迟对象入门提高资料整理

  JavaScript的Deferred是比较高大上的东西,  主要的应用还是主ajax的应用,  因为JS和nodeJS这几年的普及,  前端的代码越来越多,  各种回调套回调再套回调实在太让人崩溃, 所以就从后端拖了一个延迟对象这货, 用来解决回调地狱这个问题 。

   我们使用ajax的时候多数都是为ajax添加回调 ,然后异步向服务器发送请求, 比如如下原生的XHR代码:



    
        
        <span style="color:#000000;">
        填坑必备
        </span>
    
    
        
data

 

   因为jQ1.5以后版本的ajax的实例对象继承了延迟对象, 我们可以使用ajax实例的then或者done以及fail等等方法 ,所以上面的代码可以改写为:



    
        
        <span style="color:#000000;">
        填坑必备
        </span>
    
  //bootcdn这个cdn满好用的, 上面好多库哇, 推荐一下;
data

 

  下划线的这个是网上抄的,不想看可以略过:异步模式在web编程中变得越来越重要,对于web主流语言Javscript来说,这种模式实现起来不是很利索,为此,许多Javascript库(比如 jQuery和Dojo)添加了一种称为promise的抽象(有时也称之为deferred)。通过这些库,开发人员能够在实际编程中使用 promise模式。

  先说下延迟对象的三种状态, 当一个延迟对象被初始化那么该对象默认为peding状态

    1:pending等待状态

     2:fulfilled执行完成状态

     3:rejected拒绝状态;

  延迟对象的两个主要方法:

    1:add 这个方法是添加成功回调

    2:fail 这个方法是添加拒绝回调

  延迟对象比较高级的方法:

    1:then方法; 该方法返回一个包裹了旧延迟对象新延迟对象

    2:promise方法;这个对象返回的是阉割后的Defered(延迟对象),主要作用是保护原来延迟对象;

    3:when这个方法不是在延迟对象的实例上, (根据库的不同, when这个方法在不同的地方,比如jQ的when方法是$.when,别的库( •̀ ω •́ ) 也说不准, 反正when的源代码是在Deferred附近), 但是和延迟对象息息相关, 因为这个方法返回的也是一个延迟对象, 顾名思义when的作用就是:when你传的几个延迟对象全部resolve以后, when的返回实例会resolve....懂得自然懂, 不急;

   下面这张图是jQ这个Deferred实例对象方法, 提供参考:JS搞基指南----延迟对象入门提高资料整理_第1张图片

  以下的JS代码是《司徒框架设计》里面介绍的延迟对象mochikit, 可以自己在控制台跟踪一下就知道执行的流程:
mochikit延迟对象源代码如下, 这个延迟对象很好理解;GitHub的地址是: https://github.com/mochi/mochikit/





无标题文档




 


  博客园上博友教你写一个比较简单的延迟对象, 地址是: http://www.cnblogs.com/ygm125/p/3735677.html

  是代码量比较少的, 也好理解, 实在不懂就开控制器一步一步跟踪, 多看几遍, 不懂都说不过去:





无标题文档




View Code

 

  

  公司这边的老段写的Deferred, 是从TypeScript编译成js的, 因为这个东西比较简单, 应该不算泄露公司机密哇, 代码的最后有几个使用的实例, 你点击运行即可查看, 有兴趣自己写一个延迟对象, 印象会更加深刻:





无标题文档




 

 

   jQ1.7的延迟对象, 代码量比较少, 依赖callbacks,不太好懂, 慢慢看,参考jQ的延迟对象分析: http://www.cnblogs.com/snandy/archive/2012/12/19/2812935.html

 

   要先弄懂callbacks这个方法, 才能在弄懂Deferred,  when也只是一个Deferred的包装。 建议先看1.5版本的Deferred, 弄懂了再看1.7的Deferred, 下面的Deferred被我单独裁出来了,可以单独运行, 里面的注释是博客园的好像是aaron写的代码解析, 辅助大家看一下:




    




 

   ES6原生的好像支持PROMISE么么哒,O(∩_∩)O哈哈~;

  
参考链接:
  用法:
    阮一峰的jQuery.Deferred对象: http://javascript.ruanyifeng.com/jquery/deferred.html

  Aaron:

    Aaron深入分析延迟对象:http://www.cnblogs.com/aaronjs/p/3356505.html

    Aaron  分析 Deferred概念 :http://www.cnblogs.com/aaronjs/p/3348569.html
  github:
    when的主页: https://github.com/cujojs/when/
    延迟对象cho45: https://github.com/cho45/jsdeferred
  学习实例:
    whenJS的使用方法,来自蛐蛐的个人博客:https://www.imququ.com/post/promises-when-js.html
    教你一步一步实现一个Promise:http://www.cnblogs.com/ygm125/p/3735677.html
  百科:
    promise规范A+: https://promisesaplus.com/
    维基百科的promise/A规范说明:http://wiki.commonjs.org/wiki/Promises/A  ,打开非常慢
    维基百科的promise/B规范说明:http://wiki.commonjs.org/wiki/Promises/B ,打开也非常慢

  

转载于:https://www.cnblogs.com/diligenceday/p/4237779.html

你可能感兴趣的:(JS搞基指南----延迟对象入门提高资料整理)