this.contractRefresh$.pipe(
switchMap(() => this.apiGetAddressData),
switchMap(addressData => this.http.get(addressData.href)),
....
)
Инитициализируется приложение, проходит проверка auth.guard и currentTokenValue() возвращает null
A variant of Subject that only emits a value when it completes.
this.messageQueue.complete()
прослушка обсервера в конструкторе сервиса невозможна?
И что выдает на выходе - результат от каждого потока или общий реузльтат или результат от последнего выполненненого потока.
Когда может быть полезным?
combineLatest([o1, o2, o3])
combineLatest({
o1: o1$,
o2: o2$,
})
combineLatest([tank$, keys$, canvasSizes$])
keys$.pipe(
withLatest(tank$),
withLatest(canvasSizes$),
)
import { fromEvent, EMPTY, interval, merge, timer } from 'rxjs';
import { scan, startWith, switchMap, mapTo, delay } from 'rxjs/operators';
const DELAY=1000;
const button = document.createElement('button');
button.textContent = 'Click me';
document.documentElement.appendChild(button);
const click$ = fromEvent(button, 'click').pipe(
mapTo(false),
)
const unclick$ = click$.pipe(
delay(DELAY),
mapTo(true),
)
merge(click$, unclick$).pipe(
startWith(true),
switchMap(event => event ? timer(0, 1000) : EMPTY),
scan(acc => acc + 1, 0),
)
станавливатьна 300мсозначает "делать паузу"
merge(...[o1$, o2$, o$].map((o, i) => o.pipe(mark(i)))
Как при combineLatest но он дает последние значения а мне нужно null
- если запрос длится более 500 мс, то показываем лоадер
- если лоадер уже показан, то отображать его не менее 300 мс
this.postService.getPostByName(name).pipe(
mergeMap(post => forkJoin([
of(post),
this.postService.getTagsByPostId(post.id),
iif(() => post.hasComments(), this.getCommentsByPostId(post.id), of(null)),
]))
)
.subscribe(([post, tags, comments]) => {...})