5 javascript generator coroutine ecmascript-6
在ECMAScript 6中,正在实现一个称为“生成器”的功能。
“生成器”在功能上似乎等效于其他编程语言中的“协程”。JavaScript甚至使用与yield这些生成器中相同的关键字。
如果它们的功能完全相同,或者至少具有相同的概念,为什么在JavaScript中将它们称为“生成器”而在其他语言中将它们称为“协程”?
我能想到的唯一可能原因是,由于生成器在功能上有所不同,因此它们使用了不同的名称,但是在检查了一些代码之后,我不太确定。
这是两个在Python和JavaScript中使用协程/生成器的函数,以便您进行比较。
(来自Python文档中的Tasks和协程)
import asyncio
import datetime
@asyncio.coroutine
def display_date(loop):
end_time = loop.time() + 5.0
while True:
print(datetime.datetime.now())
if (loop.time() + 1.0) >= end_time:
break
yield from asyncio.sleep(1)
loop = asyncio.get_event_loop()
# Blocking call which returns when the display_date() coroutine is done
loop.run_until_complete(display_date(loop))
loop.close()
Run Code Online (Sandbox Code Playgroud)
(来自MDN文档中的迭代器和生成器)
function* idMaker(){
var index = 0;
while(true)
yield index++;
}
var gen = idMaker();
console.log(gen.next().value); // 0
console.log(gen.next().value); // 1
console.log(gen.next().value); // 2
Run Code Online (Sandbox Code Playgroud)
我想补充一点,我的编程知识在JavaScript之外没有多大用处。
我已经使用JavaScript超过4年了。也许这是我所学的空白,这就是为什么我在这里问。
| 归档时间: |
|
| 查看次数: |
205 次 |
| 最近记录: |