使用 generator 按行读取文件的库,co-readline
发布于 9 年前 作者 alsotang 7813 次预览 最后一次回复是 9 年前 来自 分享
co-readline
Read a file line by line in generator/co style.
install
$ npm i co-readline
easy example
var coReadline = require('co-readline')
var co = require('co')
co(function * () {
var NORMAL_FILE_PATH = 'absolute_path_to_file'
var rlGen = coReadline(NORMAL_FILE_PATH)
var lines = []
for (var line of rlGen) {
if (line.then) { // `line` could be Promise or String
line = yield line;
}
lines.push(line)
}
var fileContent = yield fs.readFile(NORMAL_FILE_PATH, 'utf-8')
fileContent.should.equal(lines.join('\n'))
})
api
coReadline(filePath) return a generator, then do for..of to it
benchmark
About 1/3 speed of build-in readline module
About 1/6 speed of fs.readFileSync
Read about 1 million lines per second
3 回复
那么晚发 给你个满分先
赞! 报个小 bug 吧,debug 模块最好放到
dependencies里,要不可能会报错的。 这里其实可以不用 co 的 :)(注:需要经过 babel-preset-stage-3)
还有个建议,可以把
gen函数名改成[Symbol.asyncIterator],这可以直接支持以后的 Asynchronous iteration。@zbinlin