我有一个RXJS函数,它将创建一个空的observable,点击结果并返回新的observable。我希望observable能够始终运行tap,这样我就不会订阅(在实际情况下它可能永远不会被订阅)。
function that() {
let obs = of({});
obs = obs.pipe(tap(() => console.log('here')))
obs.subscribe();
return obs;
}
const res = that();
res.subscribe(() => console.log('finished'))
如果您在StackBlitz上运行此代码,您会注意到here
被触发两次。输出如下:
here
here
finished
我尝试了几种不同的方法,但我似乎无法让它在不发出两次的情况下工作。
答案 0 :(得分:0)
您订阅了TWICE:
function that() {
let obs = of({});
obs = obs.pipe(tap(() => console.log('here')))
obs.subscribe(); // first subscription
return obs;
}
const res = that();
res.subscribe(() => console.log('finished')) // second subscription
这是你订阅的同一个observable,一旦在函数中,然后在返回的值上。
不要订阅功能
function that() {
let obs = of({});
obs = obs.pipe(tap(() => console.log('here')))
return obs;
}
const res = that();
res.subscribe(() => console.log('finished')) // subscribe from here only
请参阅更新后的StackBlitz。
答案 1 :(得分:0)
仅仅是仅仅点击内部订阅的情况吗?
function that() {
let obs = of({});
obs.pipe(tap(() => console.log('here'))).subscribe();
return obs;
}
const res = that();
res.subscribe(() => console.log('finished'))