zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    [学习记录]Flask会话维护
    [学习记录]MarkDown语法
    [学习记录]jinja2模板语法
    [学习记录]flask资源加载
    [学习记录]flask初步
    [常用操作]使用github桌面版上传代码
    [学习记录]简明扼要的Sass
    接口Mock测试
    12 | 从0到1:你的第一个GUI自动化测试
    navicat导出DDL语句
  • 原文地址:https://www.cnblogs.com/yonglin/p/8011792.html
Copyright © 2011-2022 走看看