我決定用下面的代碼用實驗來驗證這一點:
function checker(i) {
return i !== 2;
}
function* idMakerReturn(){
let index = 0;
while(index < 3)
if (checker(index))
yield index++;
else
return;
}
function* idMakerBreak(){
let index = 0;
while(index < 3)
if (checker(index))
yield index++;
else
break;
}
const a = idMakerReturn();
console.log('1', a.next());
console.log('2', a.next());
console.log('3', a.next());
const b = idMakerBreak();
console.log('1', b.next());
console.log('2', b.next());
console.log('3', b.next());
從何時爆發了兩種變體正確返回{ "done": true, "value": undefined }
。我也通過觀察推斷的函數類型來檢查這與TypeScript。
function* idGen(seed: string | undefined) {
if (!seed) {
return; // Or `break`
}
const something = seed.trim();
}
隨着return
一切正常,和函數返回類型爲IterableIterator<T>
。
隨着break
我被要求提供一個標籤跳轉到,也something
不再推斷爲安全訪問(只是string
因爲undefined
由if
處理),但仍然是一個string | undefined
。
這使我得出這樣的結論,因爲菲利克斯說,任何終止發電機功能將正確產生done: true
項目,但似乎return
是可取的,因爲逃跑分析它的工作原理,而它與break
不一樣。
在這方面還沒有找到正式的詞,但它對我來說已經夠好了。
終止函數的任何東西都可以工作。我不認爲這方面有什麼最佳做法。 –