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

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

ajax(url1, function(){
    ajax(url2, function(){
        ...
    });
});

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

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.

jQuery.Deferred(function(def){
    ajax(url1, function(){
        def.resolve();
    }, function(){
        //failed
        def.reject();
    });
}).done(function(){
    ajax(url2, function(){
        ...
    });
}).fail(function(){
    //失败处理
});

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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏钱曙光的专栏

一周极客热文:一个7岁女孩告诉你的关于计算机编程的本质

一个七岁的女孩子,在花了一个小时学习编程后,她对编程得出了令人赞叹的体会。(如上图) 计算机很傻,它只会做那些你让它做的事。 编程真的很难!(你必须非常的认真!...

1849
来自专栏大前端开发

使用Vue开发微信小程序:mpvue框架

接触微信小程序有一段时间的开发者或开发团队,我相信多多少少都会为自己搭建封装一些便于开发的框架/脚手架,尤其是一些做过Web开发的开发者,受到现如今Web主流开...

2553
来自专栏菩提树下的杨过

纯html的table打印注意事项

1. 在firefox下,每页均会打印重复thead(表头),tfoot(表尾)的内容;IE8下无效(其它IE版本未测试)

1122
来自专栏ytkah

微信小程序添加悬浮在线客服会话按钮

  微信为小程序提供客服消息能力,小程序用户可以方便快捷地与小程序服务提供方进行沟通,并且已经做成了组件的形式,直接就可以调用。客服会话按钮,用于在页面上显示一...

1102
来自专栏腾讯开源的专栏

WeFlow 也来了

简介 WeFlow 是一个开源、跨平台、可定制的前端开发工作流工具。 使用场景 在前端团队进行网页重构和网页开发过程中,使用 WeFlow 工具执行自动化的流程...

3507
来自专栏编程微刊

微信小程序从零开始开发步骤(八)引入框架WeUI

2424
来自专栏Material Design组件

Human Interface Guidelines — Modality

1283
来自专栏腾讯开源的专栏

【开源公告】VasSonic轻量级的高性能的Hybrid框架正式开源

VasSonic轻量级的高性能的Hybrid框架VasSonic取名于索尼动画形象音速小子,是腾讯QQ会员 VAS团队研发的一个轻量级的高性能的Hybrid框架...

5101
来自专栏浮生的专栏

在博客或者论坛插入网易云音乐的技巧

3.问题来了,很多直接复制过去无法直接使用(小小加工即可) 以flash代码为例子

3019
来自专栏腾讯防水墙

验证码前端性能分析及优化实践

在越来越注重用户体验的趋势下,验证码作为一种自打诞生以来就被贴上“多余”标签的产品,更应该给用户提供良好的体验。本文以滑动验证码作为切入点,分析了验证码可能存在...

1.3K9

扫码关注云+社区