首页 > 解决方案 > 将库函数转换为生成器

问题描述

假设我们有像这样逐行读取文件的库:

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);
});

如果我在函数内部屈服,它就不起作用。

谢谢

标签: node.jsgenerator

解决方案


您可以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;
      }
    }

阅读此内容以获取更多详细信息:


推荐阅读