jquery的deferred對象的done方法和then方法都能實(shí)現(xiàn)鏈?zhǔn)秸{(diào)用,但是他們的作用是有區(qū)別的,then方法中如果你傳遞的方法有返回值,那么他會(huì)傳遞給下一個(gè)鏈?zhǔn)秸{(diào)用的方法。而done方法與此相反,你傳遞的方法就算有返回值,done方法也不會(huì)把你的返回值傳給下一個(gè)鏈?zhǔn)秸{(diào)用的方法的,
話不多說,直接上實(shí)例:
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 );
輸出結(jié)果如下:
結(jié)果分析:
1、第一個(gè)done和第二個(gè)done都返回了defer.resolve( 2, 3 )
2、done中callback的返回值不會(huì)被傳遞
3、第二個(gè)done只有一個(gè)參數(shù),接收了defer.resolve( 2, 3 )的第一個(gè)參數(shù)2,所以result是2
4、第一個(gè)then接收defer.resolve( 2, 3 ),接收兩個(gè)參數(shù),result是6,同時(shí)新建一個(gè)deferred object,傳遞result給deferred object
5、第三個(gè)done接收到了這個(gè)新的deferred object和傳遞的result,打印結(jié)果是6,并把這個(gè)新的deferred object傳遞給第二個(gè)then
6、第二個(gè)then現(xiàn)在接收新的deferred object,它只有一個(gè)參數(shù),是result,所以參數(shù)b沒有定義,返回的結(jié)果是NaN,同時(shí)又新建一個(gè)deferred object
7、第四個(gè)done接收一個(gè)新建的deferred object,傳遞的參數(shù)是NaN,打印的結(jié)果自然就是NaN
相信看了本文案例你已經(jīng)掌握了方法,更多精彩請關(guān)注Gxl網(wǎng)其它相關(guān)文章!
推薦閱讀:
jQuery的Validate插件怎樣驗(yàn)證輸入值
jQuery EasyUI 折疊面板的使用
聲明:本網(wǎng)頁內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問題請及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com