我尝试实现一个使用FileSystem读取node.js目录树的列表结构
DIR/文件结构:
DIR1
DIR2R
file1
file2
file3
…->列表结构:
("DIR1" ("DIR2" "file1" "file2" "file3" …))
DIR() //looks like a C function
file //looks like an Atom value例如,给定的UNIX根DIR:
root bin cd
ls
lib file1
file2
opt
usr file3
file4相当于一个列表:
("root" ("bin" ("cd" "ls")
"lib" ("file1" "file2")
"opt" ()
"usr" ("file3")
"file4"
)
)话虽如此,我还是想用一些惰性异步序列(/ Infinite?)来实现这段代码。
node.js fs.readdir递归目录搜索 是一个很好的参考。
node.js有许多优秀的库,如file.walk等,但这是一个非常有趣的主题,事实上,许多代码示例都存在。
换句话说,一个很好的学科学习惰性异步序列的基本概念(流/无限列表?),而代码可以是一个很好的库,我想从头到尾实现。
子栈/流-手册 介绍了如何使用 流 编写node.js程序的基础知识。非常优秀的文章.
因此,下面是我对这个主题的思考-递归Dir树处理:
最后,这里是我关于这个主题的问题-递归Dir树处理:
是否有任何示例代码专门以懒惰的评估或玻璃钢的方式实现该主题?
我知道lazy.js、stream.js或linq.js是基于惰性评估的,但其中任何一个都不能将node.js fs.readdir定义为异步处理(玻璃钢)的流数据。根据http://danieltao.com/lazy.js/docs/AsyncSequence.html的说法,它还没有实现,对吧?
RxJS也许可以,但我不知道怎么做。
有什么想法吗?
发布于 2015-01-08 17:59:18
下面是一个基于https://gist.github.com/edygar/ee0945a73c79182367df的开始
给定一个目录,它会生成一个子目录列表。
(coffeescript)
Rx = require "rx"
fs = require "fs"
readdir = Rx.Observable.fromNodeCallback fs.readdir
stat = Rx.Observable.fromNodeCallback (pathName, cb) ->
fs.stat pathName, (err, stats) ->
stats.pathName = pathName
cb err, stats
dirObservable = (dirPath) ->
readdir dirPath
.flatMap (items) -> Rx.Observable.from items
.flatMap (item) -> stat item
.filter (stats) -> stats.isDirectory()
.map (stats) -> stats.pathName
module.exports = dirObservable
if not module.parent
path = require "path"
dirobs = dirObservable path.resolve __dirname, ".."
dirobs.subscribe (data) -> console.log datahttps://stackoverflow.com/questions/17607141
复制相似问题