前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >解决金字塔回调问题的两种手段

解决金字塔回调问题的两种手段

作者头像
码农二狗
发布2018-06-29 10:16:01
5500
发布2018-06-29 10:16:01
举报
文章被收录于专栏:码农二狗码农二狗

javascript确实是一门在设计和使用上与主流语言上有着很多区别的语言,但一点也不妨碍她成为一门优雅的语言. 但是习惯了顺序执行的coder(指我自己)使用javascript的异步操作容易产生金字塔回调的问题(无止尽的回调套回调).最常见的就是按顺序异步操作.

代码语言:javascript
复制
ajax(url1, function(){
    ajax(url2, function(){
        ...
    });
});

之前遇到这个问题时,我想到了小时候玩的多米诺骨牌,确保前一个倒下能推到自己,自己倒下以后能推到后面一个.(以jQuery的自定义事件方式实现).

代码语言:javascript
复制
jQuery(obj).on('setup1', function(){
    ajax(url1, function(){
        jQuery(obj).trigger('setup2');
    });
});

jQuery(obj).on('setup2', function(){
    ajax(url2, function(){
        jQuery(obj).trigger('setup3');
    });
});

...

后来有人提出了Promise(貌似已经纳入了es6,并且已经有部分浏览器实现了),我的理解就是在一个执行对象中加入了两种状态:成功,失败.执行完成后会调用对应的callback,jQuery在1.5已经有了类似的实现,叫做Deferred.

代码语言:javascript
复制
jQuery.Deferred(function(def){
    ajax(url1, function(){
        def.resolve();
    }, function(){
        //failed
        def.reject();
    });
}).done(function(){
    ajax(url2, function(){
        ...
    });
}).fail(function(){
    //失败处理
});

其实我觉得和我之前用的那种方式比较像.

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档