在之前的讨论中,我们展示了generator是如何的进行异步迭代的。这是建立在对杂乱无章的回调函数进行序列化的一次巨大的进步。但我们也失去了一些很重要的东西,也就是Promises的信任和组合。不要担心,我们现在就将两者结合起来使用。

回忆一下之前的基于promise的异步的例子

function foo(x,y) {return request("http://some.url.1/?x=" + x + "&y=" + y);
}foo( 11, 31 )
.then(function(text){console.log( text );},function(err){console.error( err );}
);

在之前的运行ajax例子的generator代码中,foo()返回undfined,并且我们的迭代控制器代码并不关心yielded的值。

但是基于promise的foo()在ajax call后返回一个promise对象,这暗示这里需要用foo()构建一个promise函数,然后从generator这边停止,然后迭代控制的代码将会收到promise对象。

那么迭代器是如何处理promise的呢?

它应该去监听promise对象resolve的状态(fulfillment or rejection),要么继续generator,要么抛出异常到generator。

最有效的利用promise和generator的方式是停止等待promise对象的返回,并且通过promise对象去控制generator的迭代器

Generator + Promises, the best of all worlds in ES6相关推荐

  1. “睡服”面试官系列第十八篇之generator函数的语法(建议收藏学习)

    目录 1简介 1.1基本概念 1.2yield 表达式 1.3与 Iterator 接口的关系 2. next 方法的参数 3. for...of 循环 4. Generator.prototype. ...

  2. 第十五节:有一种特殊的函数叫:Generator函数

    今天我们来学习ES6给我们带来的一种新函数,在学习它之前,前端君希望你已经阅读并初步了解了上一节的内容:iterator遍历器.因为本节的内容,是建立在iterator遍历器知识的基础上. 如果是新来 ...

  3. es6 Generator函数的this

    Generator函数的this Generator函数总是返回一个遍历器,ES6 规定这个遍历器是Generator函数的实例,也继承了Generator函数的prototype对象上的方法. fu ...

  4. ES6——Generator 函数的语法

    Generator 函数是一个状态机,封装了多个内部状态.执行 Generator 函数会返回一个遍历器对象,也就是说,Generator 函数除了状态机,还是一个遍历器对象生成函数.返回的遍历器对象 ...

  5. ES6语法总结(21)--Generator函数的异步应用

    Generator 函数的异步应用 传统方法 基本概念 Generator 函数 Thunk 函数 co 模块 异步编程对 JavaScript 语言太重要.JavaScript 语言的执行环境是&q ...

  6. generator(生成器)原理、使用及常见问题集锦

    参考网站: http://es6.ruanyifeng.com/#docs/generator Generator 概念 Generator 函数是 ES6 提供的一种异步编程解决方案. Genera ...

  7. JavaScript异步编程原理

    众所周知,JavaScript 的执行环境是单线程的,所谓的单线程就是一次只能完成一个任务,其任务的调度方式就是排队,这就和火车站洗手间门口的等待一样,前面的那个人没有搞定,你就只能站在后面排队等着. ...

  8. jQuery:ajax调用成功后返回数据

    本文翻译自:jQuery: Return data after ajax call success [duplicate] This question already has answers here ...

  9. es6的初级简易总结

    序: 1.用let const 声明变量. 2.解构赋值: 用途:a.交换变量的值:  b.从函数返回多个值;   c.函数参数的定义及默认值;   d.提取JSON数据;   e.遍历Map:   ...

最新文章

  1. 其他算法-高斯混合模型
  2. 引入 ServletContextListener @Autowired null 解决办法
  3. matlab input函数学习
  4. WDA将改变现有的abap的开发方式
  5. ubuntu16.04下安装emacs
  6. [js] 举例说明面向对象编程有什么缺点?
  7. 公钥,私钥和数字签名这样理解轻松入门!
  8. tcpdf中文解决方案
  9. CodeBlocks使用静态链接库
  10. 标定工具CANape软件使用之新建工程
  11. C语言绘画示例-进度条
  12. varnish---vcl语法
  13. 公司网盘间的风云变幻PK赛
  14. 海康sdkC++二次开发之回放下载
  15. Hive大总结!!!
  16. 两个PDF比较标出差异_[连玉君专栏]如何检验分组回归后的组间系数差异?
  17. Java进阶学习路线图
  18. IPv6-计算机网络
  19. 用累积分布函数(CDF)计算期望
  20. linux下的EC20的监控python脚本

热门文章

  1. 2018.11.06-知识回顾
  2. cannot be cast to org.springframework.web.accept.ContentNegotiationManager
  3. putty/xshell/Secure CRT远程工具详解
  4. 邮箱自动转发攻击邮件服务器
  5. nagios总结与基本配置模板-V2
  6. android入门学习一 基本概念
  7. SNS网站是否应该实行邀请制、实名制?
  8. opencv-python的dtype
  9. DSP调试报错:Error connecting to the target:Connect to PRSC failed
  10. 数字信号处理中的归一化频率