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
17 声望0 粉丝