RxJS发送订阅两次

RxJS发送订阅两次,rxjs,Rxjs,我有一个RXJS函数,它将创建一个空的可观察对象,点击结果并返回新的可观察对象。我希望observable始终运行tap,以便我不订阅(在实际情况下,它可能永远不会被订阅) 函数{ 设obs=of({}); obs=obs.pipe(点击(()=>console.log('here')) obs.subscribe(); 返回obs; } const res=that(); res.subscribe(()=>console.log('finished')) 如果在上运行此代码,您将注意到这里

我有一个RXJS函数,它将创建一个空的可观察对象,点击结果并返回新的可观察对象。我希望observable始终运行tap,以便我不订阅(在实际情况下,它可能永远不会被订阅)

函数{
设obs=of({});
obs=obs.pipe(点击(()=>console.log('here'))
obs.subscribe();
返回obs;
}
const res=that();
res.subscribe(()=>console.log('finished'))
如果在上运行此代码,您将注意到这里的
被触发两次。输出如下所示:

这里
在这里
完成
我尝试过几种不同的方法,但我似乎无法让它在不发射两次的情况下工作。

您订阅了两次:

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
这是您订阅的同一个观察值,一旦在函数中,然后在返回值上

只是不要在函数中订阅

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

请参阅更新的。

这只是只点击内部订阅的情况吗

function that() {
  let obs = of({});
  obs.pipe(tap(() => console.log('here'))).subscribe();
  return obs;
}

const res = that();
res.subscribe(() => console.log('finished'))

是的,我想了很多。我如何使它不这样做,仍然订阅两次?这是一个非常简单的情况,在真实的情况下,我必须noop订阅,以确保tap始终运行。