编程语言
首页 > 编程语言> > 在Javascript中重新启动生成器

在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