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的异步性子