這次帶給大家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,同時新建一個deferredobject,傳遞result給deferred object
5、第三個done接收到了這個新的deferred object和傳遞的result,列印結果是6,並把這個新的deferred object傳遞給第二個then#6、第二個then現在接收新的deferred object,它只有一個參數,是result,所以參數b沒有定義,回傳的結果是NaN,同時又新建一個deferred object7、第四個done接收一個新建的deferred object,傳遞的參數是NaN,打印的結果自然就是NaN相信看了本文案例你已經掌握了方法,更多精彩請關注php中文網其它相關文章!以上是done和then的差別的詳細內容。更多資訊請關注PHP中文網其他相關文章!