shinena / myProject

1 stars 0 forks source link

《你不知道的Javascript》:生成器 #61

Open shinena opened 1 year ago

shinena commented 1 year ago

生成器

ES6的一个新的函数类型。 可以在运行当中(完全保持其状态)暂停,并且将来再从暂停的地方恢复运行。 这种交替的暂停是合作性的而不是抢占式的。这意味着生成器具有独一无二的能力来暂停自身,这是通过关键字yield实现的。只有控制生成器的迭代器具有恢复生成器的能力(通过next())。

yield/next()不只是一种控制机制,也是一种双向消息传递机制。yield表达式本质上是暂停下来等待某个值,接下来的next()调用会被暂停的yield表达式传回一个值(或者是隐式的undefined)。 在异步控制流程方面,生成器的优点:生成器内部的代码是以自然的同步/顺序方式表达任务的一系列步骤。我们把可能的异步隐藏在了关键字yield的后面,把异步移动到控制生成器的迭代器的代码部分。 生成器为异步代码保持了顺序、同步、阻塞的代码模式,解决了基于回调的异步的两个关键缺陷之一。