jquery中done和then的区别(详解)
jquery的deferred对象的done方法和then方法都能实现链式调用,但是他们的作用是有区别的,then方法中如果你传递的方法有返回值,那么他会传递给下一个链式调用的方法。而done方法与此相反,你传递的方法就算有返回值,done方法也不会把你的返回值传给下一个链式调用的方法的,
话不多说,直接上实例:
var defer = jQuery.Deferred();
defer.done(function(a,b){
console.log("a = " + a+"b = " + b);
return a * b;
}).done(function( result ) {
console.log("result = " + result);
}).then(function( a, b ) {
console.log("a = " + a+"b = " + b);
return a * b;
}).done(function( result ) {
console.log("result = " + result);
}).then(function( a, b ) {
console.log("a = " + a+"b = " + b);
return a * b;
}).done(function( result ) {
console.log("result = " + result);
});
defer.resolve( 2, 3 );
输出结果如下:

结果分析:
1、第一个done和第二个done都返回了defer.resolve( 2, 3 )
2、done中callback的返回值不会被传递
3、第二个done只有一个参数,接收了defer.resolve( 2, 3 )的第一个参数2,所以result是2
4、第一个then接收defer.resolve( 2, 3 ),接收两个参数,result是6,同时新建一个deferred object,传递result给deferred object
5、第三个done接收到了这个新的deferred object和传递的result,打印结果是6,并把这个新的deferred object传递给第二个then
6、第二个then现在接收新的deferred object,它只有一个参数,是result,所以参数b没有定义,返回的结果是NaN,同时又新建一个deferred object
7、第四个done接收一个新建的deferred object,传递的参数是NaN,打印的结果自然就是NaN
以上这篇jquery中done和then的区别(详解)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。
相关文章
Jquery 插件学习实例1 插件制作说明与tableUI优化
Jquery 插件学习实例1 插件制作说明与tableUI优化,需要的朋友可以参考下。2010-04-04
jQuery 常用特效实例小结【显示与隐藏、淡入淡出、滑动、动画等】
这篇文章主要介绍了jQuery 常用特效,结合实例形式总结分析了jquery显示与隐藏、淡入淡出、滑动、动画等常用特效实现技巧,需要的朋友可以参考下2020-05-05
BootStrap的table表头固定tbody滚动的实例代码
本文给大家分享一段关于BootStrap的table表头固定tbody滚动的实例代码,代码简单易懂,需要的朋友可以参考下2016-08-08
jQuery Tab插件 用于在Tab中显示iframe,附源码和详细说明
最近有个需求,需要在Tab中放置iFrame,于是做了一个jQuery的Tab插件。2011-06-06
分享2个jQuery插件--jquery.fileupload与artdialog
这篇文章主要介绍了分享2个jQuery插件--jquery.fileupload与artdialog的使用方法及示例,非常的实用,这里推荐给大家。2014-12-12


最新评论