我在Mozilla Dev页面中查看生成器功能。
有一个示例代码具有 send()功能。
function* fibonacci() {
var a = yield 1;
yield a * 2;
}
var it = fibonacci();
console.log(it); // "Generator { }"
console.log(it.next()); // 1
console.log(it.send(10)); // 20
console.log(it.close()); // undefined
console.log(it.next()); // throws StopIteration (as the generator is now closed)
但是,chrome和Firefox(最新版本)都在send()函数上抛出错误。
对此有何看法?它不受支持吗?
答案 0 :(得分:2)
.send
是Legacy generator objects的一部分,它们特定于SpiderMonkey引擎。 It will be removed in some future release。他们已经开始在部分代码中使用ES6生成器删除/替换旧版生成器对象(Bug 1215846,Bug 1133277)
目前您仍然可以在Firefox中使用旧版生成器(截至此答案的当前版本:43.0.4)。在定义时只需忽略*
,只要函数体使用yield
语句,就会使用旧版生成器。
function fibonacci() {
var a = yield 1;
yield a * 2;
}
var it = fibonacci();
console.log(it);
console.log(it.next());
console.log(it.send(10));
console.log(it.close());
console.log(it.next());
答案 1 :(得分:-1)
有趣的是,在ESNext中可能是function.sent()
var result;
function* generator() {
result = function.sent;
}
var iter = generator();
iter.next('tromple');
return result === 'tromple';
https://github.com/allenwb/ESideas/blob/master/Generator%20metaproperty.md