gpt4 book ai didi

node.js - "reactive"逐行读取文件的方式是什么

转载 作者:太空宇宙 更新时间:2023-11-03 21:56:40 25 4
gpt4 key购买 nike

我正在使用 RxJS 学习响应式编程,并遇到需要逐行读取文件的情况。实际上我使用类似的解决方案解决了它:

https://gist.github.com/yvele/447555b1c5060952a279

它可以工作,但我需要使用一些普通的 JS 代码将缓冲区流转换为行流。 (在上面的示例中使用“readline”模块)

我想知道是否还有其他方法可以使用 RxJS 运算符将 Buffer 的 Observable 转换为 Line 的 Observable,如下例所示。

var Rx = require('rx');
var fs = require('fs');
var lines = Rx.Observable
.fromEvent(rl, 'data') // emits buffers overtime
// some transforms ...
.subscribe(
(line) => console.log(line), // emit string line by line
err => console.log("Error: %s", err),
() => console.log("Completed")
);

最佳答案

您可能可以使用 scanconcatMap 实现非常接近您想要的效果。

类似于:

bufferSource
.concat(Rx.Observable.of("\n")) // parens was missing // to make sure we don't miss the last line!
.scan(({ buffer }, b) => {
const splitted = buffer.concat(b).split("\n");
const rest = splitted.pop();
return { buffer: rest, items: splitted };
}, { buffer: "", items: [] })
// Each item here is a pair { buffer: string, items: string[] }
// such that buffer contains the remaining input text that has no newline
// and items contains the lines that have been produced by the last buffer
.concatMap(({ items }) => items)
// we flatten this into a sequence of items (strings)
.subscribe(
item => console.log(item),
err => console.log(err),
() => console.log("Done with this buffer source"),
);

关于node.js - "reactive"逐行读取文件的方式是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38991362/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com