一、前言

大约在夏季,我们谈过ES6的Promise(详见here),其实在ES6前jQuery早就有了Promise,也就是我们所知道的Deferred对象,宗旨当然也和ES6的Promise一样,通过链式调用,避免层层嵌套,如下:

移动开发培训,Android培训,安卓培训,手机开发培训,手机维修培训,手机软件培训

//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'});

移动开发培训,Android培训,安卓培训,手机开发培训,手机维修培训,手机软件培训

注:从jQuery1.8版本开始,then方法会返回一个新的受限制的deferred对象,即deferred.promise()—后续源码解读中我们会更加全面地了解到。因此,上述代码done中会打印’undefined’。

好了,通过上述示例代码,短暂的回顾了jQuery的Deferred使用后,我们一起来看看jQuery是怎么实现Deferred,当然解读jQuery的版本是大于1.8。

二、jQuery之Deferred源码剖析

网友评论