Skip to content

推荐《蒋勋细说红楼梦》

2014年7月25日

cover

如何高效debug

2014年6月29日

cover

《幸福了吗?》简评

2014年5月14日

cover

Retina屏下的CSS雪碧图

2014年3月19日

cover

我的2013

2014年1月1日

学习ES6生成器(Generator)

2013年12月29日

这几天,TJ大神的koa框架突然在国内火起来了,随之而来的,则是其使用的ES6生成器(Generator)引起了广大码农的强烈兴趣,各种文章也如雨后春笋般拔地而起,比如这篇这篇、还有这篇。这个神奇的生成器被视为解决JS“回调恶魔金字塔”的利器。在动手实践之后,发现介绍ES6生成器的文章仍然有些疏漏,因此有了这篇文章,权当是对各位大大们的补充好了。

背景

在JS的使用场景中,异步操作的处理是一个不可回避的问题,如果不做任何抽象、组织,只是“跟着感觉走”,那么面对“按顺序发起3个ajax请求”的需求,很容易就能写出如下代码(假设已引入jQuery):

javascript
// 第1个ajax请求
$.ajax({
  url:'http://echo.113.im',
  dateType:'json',
  type:'get',
  data:{
    data:JSON.stringify({status:1,data:'hello world'}),
    type:'json',
    timeout:1000
  },
  success:function(data){
    if(data.status === 1){
      // 第2个ajax请求
      $.ajax({
        ......此处省略500字
        success:function(data){
          if(data.status === 1){
            // 第3个ajax请求
            $.ajax({
              ......此处省略500字
              success:function(data){
                if(data.status === 1){

                }
              }
            });
          }
        }
      });
    }
  }
});
// 第1个ajax请求
$.ajax({
  url:'http://echo.113.im',
  dateType:'json',
  type:'get',
  data:{
    data:JSON.stringify({status:1,data:'hello world'}),
    type:'json',
    timeout:1000
  },
  success:function(data){
    if(data.status === 1){
      // 第2个ajax请求
      $.ajax({
        ......此处省略500字
        success:function(data){
          if(data.status === 1){
            // 第3个ajax请求
            $.ajax({
              ......此处省略500字
              success:function(data){
                if(data.status === 1){

                }
              }
            });
          }
        }
      });
    }
  }
});

当顺序执行的异步操作越来越多的时候,回调层级也就越多,这也就是传说中的“回调恶魔金字塔”。

《迟到的间隔年》

2013年12月2日

cover

【科普文】有关文件格式

2013年11月26日

cover

关于国外开发者的感受

2013年11月11日

印象西湖

2013年11月1日

cover

【电影】孙子从美国来

2013年10月30日

cover

遇见未知的自己

2013年10月29日

cover