Нажмите после того, как наблюдаемый был подписан - PullRequest
0 голосов
/ 28 октября 2019

Есть ли способ добавить больше операций к наблюдаемой, которая уже была подписана? Я попробовал приведенный ниже код, который не работает, так как Еще один кран после подписки часть не выполняется (код здесь )

import { of, timer } from 'rxjs';
import { tap, map, take } from 'rxjs/operators';

const source = timer(1000, 1000);
//transparently log values from source with 'do'
const example = source.pipe(
  take(3),
  tap(val => console.log(`BEFORE MAP: ${val}`)),
  map(val => val + 10),
  tap(val => console.log(`AFTER MAP: ${val}`))
);

//'do' does not transform values
//output: 11...12...13...14...15
const subscribe = example.subscribe(val => console.log(val));

example.pipe(
  tap(val => console.log(`One more tap after subscribe: ${val}`))
);

Я имею в виду использование cas, когда, например, я выполняю http-вызов, и более чем одна служба должна быть обновлена ​​с ответом на вызов.

Ответы [ 2 ]

0 голосов
/ 28 октября 2019

Я приму это как то, чего вы в конечном итоге хотите достичь

Использование, которое я имею в виду, заключается в том, например, когда я совершаю http-вызов, и необходимо обновить несколько служб с помощьюответ на звонок.

const onExampleCalled=new Subject();
// listen to example called
onExampleCalled.subscribe(console.log)
example.pipe(tap(result=>onExampleCalled.next(result)).subscribe()
0 голосов
/ 28 октября 2019

Я не совсем уверен, чего вы пытаетесь достичь, но функция pipe() не меняет источник Observable. Он просто выводит новый Observable, полученный из старого, и операторов, которые вы указали в pipe(). Поэтому ваша последняя строка кода похожа на запись

5;

То есть вы устанавливаете значение как оператор. Может быть, вы могли бы переназначить свое Observable себе после Transformation (хотя я уверен, что это будет выглядеть довольно уродливо и будет трудно понять для других, и этого следует избегать).

example = example.pipe(
  tap(val => console.log(`One more tap after subscribe: ${val}`))
);

Может быть, вам следует пойтиподробнее о том, какой у вас конкретный вариант использования, чтобы мы могли найти более чистое решение.

...