我在理解" return"的语义时遇到了问题。在发电机中。我把它理解为最后的,因此最后的价值。
function* gen() {
yield "foo";
return "bar";
}
for (const x of gen()) {
console.log(x);
}
此示例仅打印" foo"而不是" bar"。
编辑:
有没有办法获得" done = true"的返回值?使用" for"的迭代器语法,还是总是丢失?
答案 0 :(得分:1)
不,您无法从for … of
循环获取返回值。不过你可以试试
function* gen() {
yield 1;
yield 2;
return "done";
}
function* genAndLogResult() {
const val = yield* gen();
console.log(val);
}
for (const x of genAndLogResult()) {
console.log(x + 40);
}
答案 1 :(得分:0)
来自:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/function%2A
生成器中的return语句在执行时将使生成器完成。如果返回一个值,它将作为值传回。已返回的生成器不会再生成任何值。
for循环跳过“完成”步骤是有道理的。例如:
function* gen() { yield "foo" }
const inst = gen()
inst.next() // { done: false, value: "foo" }
inst.next() // { done: true, value: undefined }
function* gen() { yield "foo"; return "bar" }
const inst = gen()
inst.next() // { done: false, value: "foo" }
inst.next() // { done: true, value: "bar" }
由于生成器不一定具有return
语句,因此您不希望for循环的最后一次迭代始终必须处理最终的undefined
值。
答案 2 :(得分:0)
yield
关键字用于暂停和恢复生成器功能。
function* gen() {
yield "foo";
yield "bar";
}
for (const x of gen()) {
console.log(x);
}
它会打印foo
和bar
。如果您需要有关yield
点击here