gpt4 book ai didi

typescript - rxjs 管道和订阅(在主题上)在两个单独的步骤中没有按预期工作

转载 作者:行者123 更新时间:2023-12-04 00:25:12 26 4
gpt4 key购买 nike

这让我很头疼......下面的代码确实按预期工作:

const s$ = new Subject<any>();
s$.pipe(
switchMap(
x => {
debugger;
return myService.getSth();
}
)
).subscribe(x => {
debugger;
});
s$.next();

switchMapsubscribe 部分的debugger 都命中了。
但是如果我把它分开(我想把整个管道的东西移动到单独的库中),switchMap 中的调试器就不会再被命中,这意味着这个特定示例中的服务不会被调用:

  const s$ = new Subject<any>();
s$.pipe(
switchMap(
x => {
debugger;
return myService.getSth();
}
)
);

// ...

s$.subscribe(x => {
debugger;
});
s$.next();

我在这里错过了什么?

最佳答案

在可观察对象(包括主题)上调用 .pipe 不会修改该可观察对象所做的事情,而是会产生一个 new 可观察对象。在您的第一个示例中,您在新的 observable 上调用 subscribe。在您的第二个示例中,您对新的 observable 什么都不做,然后订阅原始的非映射主题。由于没有引用新的 observable,它就丢失了。

.pipe 的结果保存到一个变量中,然后订阅它:

const mapped$ = s$.pipe(
switchMap(
x => {
debugger;
return myService.getSth();
}
)
);

mapped$.subscribe(x => {
debugger;
});

s$.next();

关于typescript - rxjs 管道和订阅(在主题上)在两个单独的步骤中没有按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57603724/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com