一、前言 |
大約在夏季,我們談過ES6的Promise(詳見here),其實在ES6前jQuery早就有了Promise,也就是我們所知道的Deferred對象,宗旨當然也和ES6的Promise一樣,通過鏈式調(diào)用,避免層層嵌套,如下:
//jquery版本大于1.8function runAsync(){ var def = $.Deferred(); setTimeout(function(){ console.log('I am done'); def.resolve('whatever'); }, 1000); return def; } runAsync().then(function(msg){ console.log(msg);//=>打印'whatever'}).done(function(msg){ console.log(msg);//=>打印'undefined'});
注:從jQuery1.8版本開始,then方法會返回一個新的受限制的deferred對象,即deferred.promise()—后續(xù)源碼解讀中我們會更加全面地了解到。因此,上述代碼done中會打印’undefined’。
好了,通過上述示例代碼,短暫的回顧了jQuery的Deferred使用后,我們一起來看看jQuery是怎么實現(xiàn)Deferred,當然解讀jQuery的版本是大于1.8。
二、jQuery之Deferred源碼剖析
網(wǎng)友評論 |