如果我为生成器上的next
方法提供值,除了在yield
关键字右侧提供表达式之外,返回值如何? yield
已解决?
function* go() {
console.log(yield 'a');
console.log(yield 'b');
}
var g = go();
g.next();
g.next('one');
g.next('two');
输出:
one
two
Object {value: undefined, done: true}
根据输出,它是提供给下一个方法的值,该值用于yield
右侧表达式返回的值。
编辑:更新代码以更好地反映我的问题。
答案 0 :(得分:2)
有两种方法可以解释"返回收益率的价值"。
你可以指表达式yield 'a'
的值。从您的输出中可以看出,它的值为one
。
或者你可能意味着传递给yield
的值,这是有效的"返回"来自生成器的next
方法。您的代码段并未真正揭示这一点。尝试:
console.log('next1', g.next());
console.log('next2', g.next('one'));
console.log('next3', g.next('two'));
通过这种方式,您可以看到生成器发出的值,它应该类似于:
"next1", {value: "a", done: false}
"next2", {value: "b", done: false}
"next3", {value: undefined, done: true}
您可以做的另一件事是在生成器函数的末尾添加一个普通的return
值,这将是value
的{{1}}。
答案 1 :(得分:2)
根据输出,它是提供给下一个方法的值,该值用于表达式返回到yield右边的值。
提供给next
方法的值不是"用于" yield
右边的值。提供给next
的值是 yield
表达式最终评估的值。总是。 yield
右侧的值是提供给生成器的使用者的值。
它是生成器和使用生成器的代码之间的双向通信。
function* go() {
console.log(yield 'a'); // 'one'
console.log(yield 'b'); // 'two'
}
var g = go();
console.log(g.next()); // { value: 'a', done: false }
console.log(g.next('one')); // { value: 'b', done: false }
console.log(g.next('two')); // { value: undefined, done: true }