jquery中done和then的区别(详解)
时间:2023-02-25 11:00:00
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 )因此,第一个参数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区别(详细)是小编与大家分享的全部内容,希望能给大家一个参考,也希望大家多支持脚本之家。