在Javascript中重新启动生成器
作者:互联网
在节点(0.11.9,带有–harmony标志)中,如何在生成器完成后重新启动它?
我试过做generator.send(true);但它说send()方法不存在.
解决方法:
有点晚了,但这只是一个FYI.
目前,send方法并未在Node中实现,而是在Nightly(FF)中 – 并且仅在某种程度上实现.
每晚:
如果你声明你的生成器没有*,你将获得一个具有send方法的迭代器:
var g = function() {
var val = yield 1; // this is the way to get what you pass with send
yield val;
}
var it = g();
it.next(); // returns 1, note that it returns the value, not an object
it.send(2); // returns 2
节点&每晚:
现在,使用生成器的真实语法 – function *(){} – 您生成的迭代器将没有send方法.但是行为实际上是在下一个方法中实现的.另外,请注意它从未用于发送(true);自动重启你的迭代器.您必须测试yield返回的值以手动重新启动它(请参阅您链接的页面中的示例).任何价值,只要它不是虚假的,都可以起作用.你自己看:
var g = function*() {
var val = 1;
while(val = yield val);
}
var it = g();
it.next(); // {done: false, value: 1}
it.next(true); // {done: false, value: true}
it.next(2); // {done: false, value: 2}
it.next(0); // {done: true, value: undefined}
标签:javascript,node-js,generator,ecmascript-harmony 来源: https://codeday.me/bug/20190725/1531996.html