【发布时间】:2021-06-19 16:26:17
【问题描述】:
我正在尝试创建一个文件读取器对象(来自 readFileSync)并提供来自生成器函数的行。我的意图是将此生成器对象传递给多个函数并按顺序解析文件。但是,在单个函数中使用生成器后,生成器的状态会从挂起变为关闭。我来自 Python 背景,这是 Python 中非常可能的操作。想知道我在这里做错了什么。以下是我使用的代码:
生成器函数定义(我使用的是 readFileSync,它不是异步的,请暂时忽略它,因为我正在尝试让生成器工作):
function* getFileGen(path: string){
const fileContent = fs
.readFileSync(path, {
encoding: "utf-8",
flag: "r",
})
.split("\n");
while(true){
const thisLine = fileContent.shift();
if(!thisLine){
break;
}
yield thisLine;
}
}
我想在其中使用生成器的两个函数:
function getFirstFew(stream: Generator){
let i = 0;
for(let v of stream){
console.log(v);
if(i > 1){
break;
}
i++;
}
}
function getNextFew(stream: Generator){
let i = 0;
for(let v of stream){
console.log(v);
if(i > 7){
break;
}
i++;
}
最后创建一个生成器并将其依次传递给两个会打印多行的函数:
const myStream = getFileGen('path/to/file');
getFirstFew(myStream);
getNextFew(myStream);
第一个函数正确执行并打印 3 行;但是当生成器被传递给 getNextFew 函数时,它已经关闭了。
【问题讨论】:
标签: javascript typescript ecmascript-6 iterator generator