未加星标

关于Generator的微小笔记

字体大小 | |
[前端(javascript) 所属分类 前端(javascript) | 发布者 店小二05 | 时间 2016 | 作者 红领巾 ] 0人收藏点击收藏

经常见如下的代码:

co(function *(){ // resolve multiple promises in parallel var a = Promise.resolve(1); var b = Promise.resolve(2); var c = Promise.resolve(3); var res = yield [a, b, c]; console.log(res); // => [1, 2, 3] }).catch(onerror);

其实是这样的:

function co(genFunc) { const genObj = genFunc(); step(genObj.next()); function step({ value, done }) { if (!done) { // A Promise was yielded value .then(result => { step(genObj.next(result)); // (A) }) .catch(error => { step(genObj.throw(error)); // (B) }); } } }

利用 Generator 的特性,在 iterator.next() 时,只有 Promise 被 fullfilled 后,才会运行 yeild 后的代码。

上面的例子是用的 CO ,是基于Promise的。与此类似的还有 Q ,Q在内部自己实现了Promise规范。

在这篇文章 No promises: asynchronous javascript with only generators 中,作者实现了一个小库,也可以同样完成相同的效果。不同的是实现原理:

setTimeout(runYieldedValue, 0, yielded.value);

还要提到一个库 wait-promise 。

参考文章:http://exploringjs.com/es6/ch_generators.html

以上。

本文前端(javascript)相关术语:javascript是什么意思 javascript下载 javascript权威指南 javascript基础教程 javascript 正则表达式 javascript设计模式 javascript高级程序设计 精通javascript javascript教程

主题: JavaScriptJava其实
分页:12
转载请注明
本文标题:关于Generator的微小笔记
本站链接:http://www.codesec.net/view/485520.html
分享请点击:


1.凡CodeSecTeam转载的文章,均出自其它媒体或其他官网介绍,目的在于传递更多的信息,并不代表本站赞同其观点和其真实性负责;
2.转载的文章仅代表原创作者观点,与本站无关。其原创性以及文中陈述文字和内容未经本站证实,本站对该文以及其中全部或者部分内容、文字的真实性、完整性、及时性,不作出任何保证或承若;
3.如本站转载稿涉及版权等问题,请作者及时联系本站,我们会及时处理。
登录后可拥有收藏文章、关注作者等权限...
技术大类 技术大类 | 前端(javascript) | 评论(0) | 阅读(19)