Я не уверен, что следую тому, что вы просите, но я могу ответить на ваше беспокойство по поводу того, сколько раз создается ваша наблюдаемая:
Один раз.
const create$ = api.create(potato)
Это создаетваша наблюдаемая.Ваше .pipe
приложение к наблюдаемой является частью пути данных от точки наблюдения к подписчикам.
potato ---(pipe)--->.subscribe()
+----(pipe)--->.subscribe()
+----(pipe)--->.subscribe()
+----(pipe)--->(expectObservable inspection)
Вместо этого может показаться, что вам может понадобиться добавить дополнительный канал для обменарезультат.Возможно, неудивительно, что эта труба называется share
.
Вход
import { Observable, Subject } from 'rxjs';
import { share, tap } from 'rxjs/operators';
let obj: Subject<string> = new Subject<string>();
let obs: Observable<string> = obj.pipe(tap(() => console.log('tap pipe')));
obs.subscribe((text) => console.log(`regular: ${text}`));
obs.subscribe((text) => console.log(`regular: ${text}`));
obs.subscribe((text) => console.log(`regular: ${text}`));
let shared: Observable<string> = obs.pipe(share());
shared.subscribe((text) => console.log(`shared: ${text}`));
shared.subscribe((text) => console.log(`shared: ${text}`));
shared.subscribe((text) => console.log(`shared: ${text}`));
obj.next('Hello, world!');
Выход
tap pipe
regular: Hello, world!
tap pipe
regular: Hello, world!
tap pipe
regular: Hello, world!
tap pipe
shared: Hello, world!
shared: Hello, world!
shared: Hello, world!