jquery 中的deferred和promise 实践

介绍jquery 的deferred由来

它是jquery1.5版本的新出的功能,为了解决异步回调的问题。大概2011年就出来了。现在es6规范中的promise,基本和deferred对象是一个概念。

定义deferred对象

   var deferred1 = $.Deferred();//这样就创建了一个deferred对象
   deferred.done(sucessfn);     //定义d1成功后的回调函数
   deferred.fail(failfn);              //定义d1失败后的回调函数

每一个deferred对象,有三种状态

  1. 正在处理中:
  2. 成功状态:
  3. 失败状态:

当deferred对象被resolve/reject触发之后,就会改变状态,然后调用不同状态下的函数。

    //从正在处理的状态变为成功状态,callback done,
    deferred1.resolve(); 
   //从正在处理的状态变为失败状态,callback fail,
  deferred1.reject();

以上就是deferred的基本用法,简单说来。就是可以让我们认为控制一个对象成功失败的状态。看到这里,好像没觉得它有多牛逼。

deferred对象解决了什么问题?~~

1.ajax对象,易读性

  • jquery1.5版本重写了$.ajax对象,$.ajax的返回值全是deferred对象。用done和fail来表示成功或者失败。

      var deferred2 = $.ajax("test.html")
                       .done(function(){ alert("哈哈,成功了!"); })
                       .fail(function(){ alert("出错啦!"); });
    
  • 为一个deferred对象,添加多个回调处理函数,且按照添加的顺序执行

      deferred2.done(sucessfn 1) 
               .done(sucessfn 2)
    
  • 解决异步金字塔回调 $.when()
    想想这样的业务场景,有三个及以上异步请求的时候,如何保证3个请求都成功之后,在执行一个函数呢?

      $.ajax({
            success: $.ajax({})   //只能通过回调成功的函数里,嵌套ajax请求
      })
      
      //通过计数器来实现,但是每个回调成功的函数,都要检查当前的计数
      var flag = 0;
      $.ajax({
            success: flag++  
                     if(flag == 3){
                              //3个请求已成功
                     }
      })
     //只有当两个ajax都成功的时候,才调用done的回调函数。
      $.when($.ajax1,$.ajax2)
       .done(f1)
       .fail(f2)
    

特别注意:when函数,只接受deferred对象哦!!!!

  • 简单写法 then方法,直接把done状态和fail状态都写进去

      deferred1.then(donefunc,failfunc);
    
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Promise 的含义 一句话概括一下promise的作用:可以将异步操作以同步操作的流程表达出来,避免了层层嵌套...
    雪萌萌萌阅读 5,593评论 0 7
  • 一、什么是deferred对象? 开发网站的过程中,我们经常遇到某些耗时很长的javascript操作。其中,既有...
    壮哉我大前端阅读 272评论 0 1
  • 请移步: https://blog.cdswyda.com/post/20160923
    依韵宵音阅读 411评论 0 6
  • 迎着苍黄的落日,炮声响彻在天空。像一颗颗尖锐的子弹,向天空的心脏开上了一枪又一枪。我本以为柔弱的天空会千疮百孔,...
    孔子颜渊阅读 943评论 17 8
  • 格式塔心理学(gestalt psychology),又叫完形心理学,是西方现代心理学的主要学派之一,诞生于德国,...
    暖阳_1332阅读 1,758评论 0 2