私は次のコードでこれを実験的に検証することにしました:
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でチェックしました。 return
すべてが正しく動作し、関数の戻り値の型がIterableIterator<T>
あると
function* idGen(seed: string | undefined) {
if (!seed) {
return; // Or `break`
}
const something = seed.trim();
}
。私はsomething
にしてもジャンプするラベルを提供するように求めていますbreak
で
はもはや(undefined
はif
によって処理されるためだけstring
)アクセスに安全であると推測されていないが、string | undefined
残っています。
これは、フェリックスが言うように、そのを締結する私をリードジェネレータ関数を終了何が正しくdone: true
アイテムを得られますが、それはbreak
でないのに対し、エスケープ分析はそれで動作するためreturn
が望ましいと思われます。
まだ正式な言葉が見つかりませんでしたが、それでも十分です。
機能を終了させるものはすべて動作します。その周りにベストプラクティスがあるとは思わない。 –