<script src="jquery.js"></script>
<script>
function fn1(args){console.log('fn1',args);}
function fn2(args){console.log('fn2',args);}
var defer=$.Deferred(),
filtered=defer.pipe(function(value){return value*2;});
defer.done(fn1);
filtered.done(fn2);
defer.resolve(5);
/*输出
fn2 10
fn1 5
*/
</script>
为什么是先执行fn2再执行fn1?
在执行filtered=defer.pipe(function(value){return value*2;});的时候,会返回$.Deferred(fn).promise();$.Deferred(fn)中的fn会在$.Deferred()结束之前执行,pipe方法中的$.Deferred(fn)的fn会执行deferred.done(匿名函数。。。),这个匿名函数负责执行pipe方法返回的新的异步队列,要先于defer.done(fn1);所以先执行匿名函数匿名函数执行fn2,最后执行fn1。表达能力不是很好,所以说的不是很清楚orz。。。