ECMAScript 6 之Generator

查看更多文章: https://alili.tech

Generator的基本使用

Generator是ES6提供的一种异步解决方案.他能干什么呢?

能具体解决我们什么样的问题呢?

比如说,我想做一件事情,但是必须要求有两个ajax完成后才能做.

比如:

$http.get('请求1').success(function(){
  $http.get('请求2').success(function(){
  //  do something ...
  })
})

这样做的话,就要一层一层的嵌套,当请求更多的时候,代码会写的非常的乱.

现在我们有了Generator,我们该怎么做呢?

function* getData(){
  yield $http.get('请求1').success(function(){
  //  do something ...
  g.next();
  });

  yield $http.get('请求2').success(function(){
  //  do something ...
  g.next();
  });

  //最终要做的事情

}
var g =getData();
g.next();

就这样,我们把必须要嵌套的异步操作,写成了"同步".

上面的函数,有三个关键的地方:

1.function 后面多了一个 *

2.函数里多了一个yield 关键字

3.函数执行后,会有一个next方法;

Generator的基本使用,就是在这三个关键的地方.


关于Generator的运行过程是这样子的:

1.在function后面加一个*,表示申明了一个Generator函数.

2.当Generator函数运行后,会实例出一个Generator对象.
这个Generator对象下会有一个next方法.

3.当我们运行next方法的时候,才能真正运行Generator函数里真正的内容.

4.当执行Generator函数的时候,碰到了yield,函数会暂停一次.

5.当下一次运行next方法的时候,Generator函数会从上一次暂停的地方继续执行.


yield

yield关键字与return很像,会返回相应的东西.

他们的区别在于:

yield是暂停函数的运行,必须要在Generator函数里使用.

return是终止函数的运行,任何地方都能使用


公众号“ Alili丶前端大爆炸”,关注后提供海量学习资料

图 1

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值