deferred中done和then的区别

507 阅读1分钟
var defer = jQuery.Deferred();

defer.done(function(a,b){
    console.log("a = "+ a+"b = "+ b);
    returna * b;

}).done(function( result ){
    console.log("result = "+ result);

}).then(function( a, b ){
    console.log("a = "+ a+"b = "+ b);
    returna * b;

}).done(function( result ){
            console.log("result = "+ result);

}).then(function( a, b ){
    console.log("a = "+ a+"b = "+ b);
    returna * b;

}).done(function( result ){
    console.log("result = "+ result);
});

defer.resolve( 2, 3);

运行结果:

  • a = 2b = 3
  • result = 2
  • a = 2b = 3
  • result = 6
  • a = 6b = undefined
  • result = NaN

结论:

  • done 只是把监听器加到promise身上,返回的是原来的promise
  • then 会把监听器应用到promise的值,并且会创建新的promise