RxJS发送订阅两次

时间:2018-03-27 00:29:36

标签: rxjs

我有一个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

我尝试了几种不同的方法,但我似乎无法让它在不发出两次的情况下工作。

2 个答案:

答案 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'))