锐单电子商城 , 一站式电子元器件采购平台!
  • 电话:400-990-0325

jquery中done和then的区别(详解)

时间:2023-02-25 11:00:00 jjx拉绳位移传感器

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 );

输出结果如下:

fc259d1716988c031315dfff792d3531.png

结果分析:

1、第一个done和第二个done都返回了defer.resolve( 2, 3 )

2、done中callback返回值不会传递

3、第二个done只有一个参数被接收defer.resolve( 2, 3 )因此,第一个参数2result是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区别(详细)是小编与大家分享的全部内容,希望能给大家一个参考,也希望大家多支持脚本之家。

锐单商城拥有海量元器件数据手册IC替代型号,打造电子元器件IC百科大全!

相关文章