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

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 条评论
登录 后参与评论

相关文章

来自专栏新工科课程建设探讨——以能源与动力工程专业为例

2.2.6 第三方js类库

990
来自专栏Material Design组件

Human Interface Guidelines — Modality

1433
来自专栏浮生的专栏

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

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

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

纯html的table打印注意事项

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

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

WeFlow 也来了

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

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

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

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

5331
来自专栏编程微刊

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

2844
来自专栏娱乐心理测试

vue开发类似淘宝商品评价页面(星级,上传多张图片)

最近在写一个关于vue的商城项目,然后集成在移动端中,开发需求中有一界面,类似淘宝商城评价界面!实现效果图如下所示:

1022
来自专栏前端儿

【转】不同内核浏览器的差异以及浏览器渲染简介

浏览器最重要或者说核心的部分是“Rendering Engine”,可大概译为“解释引擎”,不过我们一般习惯将之称为“浏览器内核”。负责对网页语法的解释(...

1041
来自专栏前沿技墅

漫谈前端性能本质 突破React应用瓶颈

侯策:硕士毕业于法国国立高等电信学校。曾任职于BePATIENT集团,负责互联网+医疗平台的研发。曾任职于法国能源和苏伊士集团,参与欧洲天然气运输和费用系统的研...

1431

扫码关注云+社区