首頁 >web前端 >js教程 >done和then的差別

done和then的差別

php中世界最好的语言
php中世界最好的语言原創
2018-03-15 15:12:456620瀏覽

這次帶給大家done和then的差別,使用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

相信看了本文案例你已經掌握了方法,更多精彩請關注php中文網其它相關文章!


推薦閱讀:

jQuery的Validate外掛程式怎麼驗證輸入值

jQuery EasyUI 折疊面板的使用
#

以上是done和then的差別的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn