sl3*_*dg3 3 rxjs typescript rxjs6
这让我很头疼……以下代码确实按预期工作:
const s$ = new Subject<any>();
s$.pipe(
switchMap(
x => {
debugger;
return myService.getSth();
}
)
).subscribe(x => {
debugger;
});
s$.next();
Run Code Online (Sandbox Code Playgroud)
无论debugger在switchMap和subscribe部分被击中。
但是,如果我将其拆分(我想将整个管道内容移动到单独的库中),switchMap则不再调用 中的调试器,这意味着不会调用此特定示例中的服务:
const s$ = new Subject<any>();
s$.pipe(
switchMap(
x => {
debugger;
return myService.getSth();
}
)
);
// ...
s$.subscribe(x => {
debugger;
});
s$.next();
Run Code Online (Sandbox Code Playgroud)
我在这里想念什么?
调用.pipe一个 observable(包括一个主题)不会修改那个 observable 的作用,而是产生一个新的observable。在您的第一个示例中,您在该新 observable 上调用 subscribe。在您的第二个示例中,您不对新的 observable 做任何事情,然后订阅原始的非映射主题。没有任何内容引用新的 observable,它就丢失了。
将结果保存.pipe到一个变量,然后订阅它:
const mapped$ = s$.pipe(
switchMap(
x => {
debugger;
return myService.getSth();
}
)
);
mapped$.subscribe(x => {
debugger;
});
s$.next();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2994 次 |
| 最近记录: |