加入收藏 | 设为首页 | 会员中心 | 我要投稿 应用网_丽江站长网 (http://www.0888zz.com/)- 科技、建站、数据工具、云上网络、机器学习!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

jQuery的done和then差异实例讲解

发布时间:2021-11-13 11:35:18 所属栏目:PHP教程 来源:互联网
导读:jQuery的deferred对象的done方法和then方法都能实现链式调用,但是他们的作用是有区别的,then方法中如果你传递的方法有返回值,那么他会传递给下一个链式调用的方法。而done方法与此相反,你传递的方法就算有返回值,done方法也不会把你的返回值传给下一个

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 );
 
输出结果如下:
 
 
 
结果分析:
 
第一个done和第二个done都返回了defer.resolve( 2, 3 )
done中callback的返回值不会被传递
第二个done只有一个参数,接收了defer.resolve( 2, 3 )的第一个参数2,所以result是2
第一个then接收defer.resolve( 2, 3 ),接收两个参数,result是6,同时新建一个deferred object,传递result给deferred object
第三个done接收到了这个新的deferred object和传递的result,打印结果是6,并把这个新的deferred object传递给第二个then
第二个then现在接收新的deferred object,它只有一个参数,是result,所以参数b没有定义,返回的结果是NaN,同时又新建一个deferred object
第四个done接收一个新建的deferred object,传递的参数是NaN,打印的结果自然就是NaN

(编辑:应用网_丽江站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读