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的异步性质
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。