jQeury中的deferred

deferred的引见

先看看下面的衔接:http://www.cnblogs.com/147258…

deferred的进一步探讨

看下面一个小demo:


var d = $.Deferred();
      d.then(function(val){
      console.log(val);
 }).then(function(val){console.log(val)});
d.resolve(22);

输出22 22,为何?
then 函数实际上是把回调函数到场行列中 而触发这些回调函数行列 是resolve 函数。传入resolve函数的数据会被传入回调函数中。所以这里打印出22 22
假如换取一下实行递次呢?

var d = $.Deferred();

    d.resolve(22)

d.then(function(val){

  console.log(val);

}).then(function(val){console.log(val)});
//
这里依旧打印了22,22.为何先实行的函数 后到场的行列照样可以实行?
实际上是如许不管是先实行的then 函数后实行的resolve 照样先resolve后实行then
效果都是一样的。
这是由于假如先实行的resolve 背面一旦在行列中到场函数就会马上实行
再看一个案例:

var s = $.Deferred();

s.resolve("rir");
s.then(function(val){setTimeout(function(val){console.log(val+"3")}).then(function(val){console.log(val+"2")});

会先打印出rir2 然后打印出 rir3 即使是到场行列 也转变不了settimeout的异步性子

    原文作者:myjeajea
    原文地址: https://segmentfault.com/a/1190000010348540
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞