node.js - 将库函数转换为生成器
问题描述
假设我们有像这样逐行读取文件的库:
var lines = lib.open('file.txt');
lines.on('line', function(line) {
console.log(line);
});
有没有办法包装代码并创建可与“for of”循环一起使用的生成器:
for (let line of lines) {
console.log(line);
}
lines.on('line', function(line) {
yield line; // doesnt work inside the function
console.log(line);
});
如果我在函数内部屈服,它就不起作用。
谢谢
解决方案
您可以for await of loop
在直播中使用
async function read(lines) {
for await (const line of lines) {
console.log('>>> ',line);
}
}
var lines = lib.open('file.txt');
read(lines)
从块到行
以下函数接受一个异步迭代字符串并返回一个异步迭代行:
async function* chunksToLines(chunksAsync) {
let previous = '';
for await (const chunk of chunksAsync) {
previous += chunk;
let eolIndex;
while ((eolIndex = previous.indexOf('\n')) >= 0) {
// line includes the EOL
const line = previous.slice(0, eolIndex+1);
yield line;
previous = previous.slice(eolIndex+1);
}
}
if (previous.length > 0) {
yield previous;
}
}
阅读此内容以获取更多详细信息:
推荐阅读
- unity3d - 将搅拌机模型导入统一
- c# - 如何使用共享内存将对象引用从一个 uwp 应用程序共享到另一个应用程序?
- node.js - 在 Typescript 中使用断言并获取“断言要求调用目标中的每个名称都使用显式类型注释声明”错误
- angular - Angular 2中使用[ngStyle]的getter vs property vs属性绑定
- azure-pipelines - 仅在 90% 的时间跳过特定的先前任务时才运行任务(Azure Build Pipeline Classical)
- azure-devops - 与 Azure-devops 的间歇性连接。无法将代码推送到仓库
- mysql - Laravel 加入 Null
- android - Android 设备上的 React Native Fetch 错误
- excel - 从 Excel 宏打开并写入 txt 文件
- python - 如何使用 timedelta64 添加小数天?