
1 willwen 2014 年 9 月 24 日 via iPhone 作算少的Harmony使用者,我可以自己的。 1. Promise了好版本的定,很久之前就已存在,它解的是串行的步嵌套 2. yield字把Generator Function切割有多出口的Generation Promise是Javascript社的研物,而yield是ECMA-262考而的「程」。 yield可以做到非串行,而Promise很。Promise兼容性,yield只能等。 各有千秋 於Generation,考我的博客。http://lifemap.in/koa-co-and-coruntine/ |
2 otakustay 2014 年 9 月 24 日 本来就不是为了实现一个东西提出的……generator本质上不是解决异步的方案,让你们用来玩异步了而已啊,ES7的async才是真正做异步的 |
5 jsonline 2014 年 9 月 24 日 Promise 哪里避免了回调? 只是一种回调的规则而已。 |
8 otakustay 2014 年 9 月 24 日 Promise最大的特点有以下几个: 1. 原本嵌套式的callback模型变成“看上去线性”的模型,以此提供代码逻辑的顺畅性 2. 异常传递,即当任何一个Promise失败时,异常会透过那些没有reject处理的节点一直到最后去,这是NodeJS的callback模型没有做到的。异常传递更接近正常代码中的try/catch,你可以有N行代码,任何一行代码都可能出错,但总能被后面的catch捕获,而NodeJS的callback模型要在每个callback中处理err参数,这是我一直反对NodeJS的异步模型的很重要的原因之一 而以上几点,其实通过Generator都能做,但这并不代表Generator和Promise是一类东西。Generator可以做更多的事,比如: 1. 生成一个无限列表,每次获取都递增1 2. 完成类似C#的Linq的工作,即多个对数组元素的操作(Iterator)只需要遍历一次数组,比如这样:asGenerator(array).each(o -> o.x++).where(o -> o.x > 10).map(o -> o.x),只有一次遍历 3. 产生一个每次获取一个元素都有重要、高消耗的资源访问的列表,完成延迟加载模型来将高消耗的元素获取延迟到真正访问时,而不需要一开始就获取N次形成静态的数组 Generator的用法非常非常多,上面说的也只是经典场景而已,绝对不要只把它当成一个coroutine的玩法,会被自己关在笼子里玩不开的 |
9 zhyu 2014 年 9 月 24 日 via iPhone 这俩不是一个东西啊( promise避免了回调的嵌套写法,代码可读性更好,异常处理也比较方便 generator…我会说我看到的时候就想到我写python的时候了么(我python写的多,node还在摸索中 |
10 otakustay 2014 年 9 月 24 日 > 为什么node的主题是纯黑,能正常点吗? 因为这里是为了黑Node而存在的(误 |
11 SoloCompany 2014 年 9 月 24 日 generator 是把一段看上去是同步执行的代码给「异步」起来,可以给你很好的控制代码运行的状态和行为,甚至可以具备达到让你用同步的方式来写异步代码的能力,但理解起来会有点困难。 而 promise 就是个专门为异步设计的东西,是把异步串接起来,和同步运行基本上是背道而驰的。 另外要注意一下,比如类似于 facebook 的那种注入 generator 框架是很不靠谱的,本质上是修改你的代码,把同步定义的函数变成一个 yield;问题在于它又不足够智能,经常会把一些不该异步化的函数也给改了,但是在运行过程中很难发现也很难调试,这些坑只要踩过一次你都会选择远离的。要用 generator 还是等 ECMA6 正式发布吧 |
12 skyitachi 2014 年 9 月 24 日 generator 的特点在于lazy computation,结合es6的for...of会很方便很强大,当然这只是generator的基础用法。 promise 在于让异步代码看上去同步化,有着更好的可读性。 |
13 klam 2014 年 9 月 24 日 深入理解Promise: http://segmentfault.com/blog/kk_470661/1190000000586666 Node.js回调黑洞全解:Async、Promise 和 Generator: http://zhuanlan.zhihu.com/FrontendMagazine/19750470 |