【发布时间】:2016-04-01 22:46:39
【问题描述】:
我正在尝试使用 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)
})
问题:
- 有没有更高效/更简洁的方式来
.map使用异步操作? -
.zip部分的相同问题
【问题讨论】:
标签: javascript node.js rxjs