美文网首页
Deferred对象

Deferred对象

作者: SecondRocker | 来源:发表于2015-09-20 23:59 被阅读32次

jQuery在1.5之后引进了Deferred对象,主要是对操作时间很长的方法回调提供一个简单、直观的解决方案。
之前,对时间较长的操作通常使用回调,单个回调还可以接受,但如果嵌套回调的话就有些蛋疼了。

demo

$.getJSON('/main/some/',{},function(data){
    $.post('/main/another_url',{data:data[0]},function(){
        //some code
    });
});

jQuery定义了Deferred对象,并重写了ajax代码,使用ajax、get等方法会返回一个Deferred的Promise对象,此对象支持done、fail等方法,并支持链式调用

demo ajax

$.get('/url').done(function(){
    //code success
}).fail(function(){
    //code fail
});

demo Deferred

var longTimeFunction = function(){
    var defe = new $.Deferred();
    defe.notify(); //通知,会触发progress
    setTimeout(function(){
        alert('long time function done!');
        if (a){
            defe.resolve(); //执行成功,会触发done,可传递参数给done
        }
        else{
            defe.reject();//执行失败,会触发fail,可传递参数
        }
    },3000);
    //此处也可返回defe对象,但暴漏此对象会导致外界调用 
    //resolve、reject等方法干扰业务正常处理,promise方法返回的
   //Promise方法不会暴露这些方法。
    return defe.promise();
}
var doneDoing = function(){
  //some thing done success
}
longTimeFunction().done(doneDoing).fail(doneFail).progress(function(){
    alert("Bing progress,please wait");
});

如果不需要根据执行结果调用不同的方法而是依次调用多个方法,我们可以不使用resolve、reject、notify方法,只调用promise返回promise对象,同时用then执行需要依次执行的方法即可。

demo then

  var longWaitFunc = function(){
    var defe = new $.Deferred();
    //a big array
   for(var i in bigArray){
      // progress array
   }
   return defe.promise();
  }
  $.when(longWaitFunc).then(do1).then(do2).then(do3) ;

相关文章

  • Deferred对象

    Deferred对象 什么是Deferred对象?Deferred对象是从jQuery 1.5.0版本开始引入的一...

  • jQuery.deferred详解

    deferred是什么? deferred 翻译为推迟,在jQuery 1.5中引入的Deferred对象是通过调...

  • deferred对象的方法

    (1)$.Deferred()生成一个deferred对象。(2)deferred.done()指定操作成功时的回...

  • deferred对象学习(上)

    一、deferred对象是什么? defer:"延迟",所以deferred对象的含义就是"延迟"到未来某个点再执...

  • deferred对象

    最近做项目,调用后端接口,需要等到2个ajax返回再执行另一个ajax,首先想到的是使用promise,但是考虑...

  • Deferred对象

    jQuery在1.5之后引进了Deferred对象,主要是对操作时间很长的方法回调提供一个简单、直观的解决方案。之...

  • Deferred对象

    jQuery.Deferred 对象 实例上的方法 一共14个 deferred.resolve(args) / ...

  • jQuery-v2.0.3源码浅析05-when

    jQuery提供的when方法可以管理多个Deferred对象。打比方说如果你创建了多个Deferred对象,这个...

  • jQuery的deferred对象详解 作者:阮一峰 一、什么是deferred对象? 开发网站的过程中,我们经常...

  • jQuery-v2.0.3源码浅析04-Deferred

    接下来我们来看下jQuery的延迟对象Deferred。我们前面讲过Callbacks函数,其实Deferred就...

网友评论

      本文标题:Deferred对象

      本文链接:https://www.haomeiwen.com/subject/exqicttx.html