小编Jak*_*zak的帖子

使用RxJ遍历node.js中的目录树

我正在尝试使用RxJs和node.js遍历目录树。

我想出了可行的解决方案:

const filesInDir = Rx.Observable.fromNodeCallback(fs.readdir)
const statFile = Rx.Observable.fromNodeCallback(fs.stat)

const listFiles = (prefix, dir = '') => {
    const file$ = filesInDir(`${prefix}/${dir}`)
        .flatMap(file => file)
        .filter(file => !file.startsWith('.'))
    const isDir$ = file$
        .map(file => statFile(`${prefix}/${dir}/${file}`))
        .flatMap(file => file)
        .map(file => file.isDirectory())
    return file$
        .zip(isDir$, (file, isDir) => {return {file, isDir}})
        .map(f => {
            if (f.isDir) {
                return listFiles(prefix, `${dir}/${f.file}`)
            }
            return Rx.Observable.return(`${dir}/${f.file}`)
        })
        .flatMap(file => file)
}

listFiles('public')
    .toArray()
    .subscribe(list => {
        console.log(list)
    })
Run Code Online (Sandbox Code Playgroud)

问题:

  1. 是否有.map使用异步操作的更有效/简洁的方法?
  2. 对于同样的问题 …

javascript node.js rxjs

3
推荐指数
1
解决办法
1039
查看次数

标签 统计

javascript ×1

node.js ×1

rxjs ×1