【发布时间】:2020-05-11 09:04:28
【问题描述】:
我正在尝试使用 bindNodeCallback 和 fs readdir, stat 读取文件。
这是我的代码:
import { readdir, stat, Stats } from "fs";
import { bindNodeCallback, Observable, of } from "rxjs";
import { catchError, filter, flatMap, map, mergeMap, switchMap, tap } from 'rxjs/operators';
const readDirBindCallback: (path: string) => Observable<string[]> = bindNodeCallback(readdir);
const fileStateBindCallback: (path: string) => Observable<Stats> = bindNodeCallback(stat);
readDirBindCallback('/Users/.../WebstormProjects/copy')
.pipe(
flatMap(x => x),
tap(console.log),
switchMap(status => {
console.log(status);
return fileStateBindCallback('/Users/.../WebstormProjects/copy/' + status);
})
)
.subscribe(result => {
console.log(result)
});
“switchMap”已正确调用多次。
问题是 fileStateBindCallback 只被调用了一次,最终的订阅只记录了一次。
为什么会这样? 如果我在 switchMap 块中手动订阅 fileStateBindCallback。它会按我的预期运行。但这不是一个好的做法,也不符合我的要求。
【问题讨论】:
标签: javascript node.js rxjs