this.contractRefresh$.pipe(
switchMap(() => this.apiGetAddressData),
switchMap(addressData => this.http.get(addressData.href)),
....
)
Инитициализируется приложение, проходит проверка auth.guard и currentTokenValue() возвращает null
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]) => {...})
reloadGameInfo = interval(10000);
stepTimer = interval(1000);
second_to_event = 100;
this.stepTimer.subscribe(() => {
this.second_to_event = this.second_to_event >= 0 ? this.second_to_event - 1 : 0;
if (this.second_to_event === 0) {
// make request at second_to_event equals to 0 and set second_to_event if request success
}
});
this.reloadGameInfo.pipe(
filter(() => this.second_to_event > 0
)
.subscribe(() => {
// do 10000 periodic task
})
@Injectable({
providedIn: 'root',
})
export class MyService {
public myVar$ = new Subject();
}
<div>{{ myService.myVar$ | async}}</div>
export class Comp1Component {
constructor(
public myService: MyService
) {}
}
export class Comp2Component {
constructor(
public myService: MyService
) {}
myFunc(){
this.myService.myVar$.next(1000);
}
}