RxJS A-ից Z — Մաս 2
RxJS A-ից Z — Մաս 2: Hot vs Cold Observables, Schedulers, Practical Use Cases
Այս տարբերությունը շատ կարևոր է հասկանալու՝ ինչպես է Observable-ն «ստեղծում» տվյալները:
import { Observable } from 'rxjs';
const cold$ = new Observable(observer => {
console.log('Observable started');
observer.next(Math.random());
});
cold$.subscribe(val => console.log('Sub A:', val));
cold$.subscribe(val => console.log('Sub B:', val));
Արդյունք՝ տարբեր random թվեր
import { Subject } from 'rxjs';
const hot$ = new Subject();
hot$.subscribe(val => console.log('Sub A:', val));
hot$.next(Math.random());
hot$.subscribe(val => console.log('Sub B:', val));
hot$.next(Math.random());
Արդյունք՝ Sub B չի ստանա առաջին արժեքը, որովհետև բաժանորդագրվել է ուշ։
Schedulers թույլ են տալիս կառավարել երբ և ինչպես է Observable-ը կատարում emit/subscribe։
asyncScheduler
– setTimeout-ի պեսqueueScheduler
– sync, հերթովasapScheduler
– Promise microtask import { of, asyncScheduler } from 'rxjs'; console.log('Before'); of(1, 2, 3, asyncScheduler).subscribe(val => console.log(val)); console.log('After');
Output:
Այսինքն՝ asyncScheduler-ը կատարում է հաջորդ փուլում (setTimeout-ի պես)
fromEvent(searchInput, 'input') .pipe( map(e => e.target.value), debounceTime(300), distinctUntilChanged(), switchMap(query => http.get('/api/search?q=' + query)) ) .subscribe(results => renderResults(results));
fromEvent(button, 'click') .pipe( throttleTime(2000) ) .subscribe(() => { // Call API or do action console.log('Clicked!'); });
Արդյունք՝ սեղմելուց հետո թույլ կտա նոր սեղմում միայն 2վ հետո։
combineLatest
– վերադարձնում է վերջին արժեքները, երբ որևէ observable emit է անումforkJoin
– սպասում է, մինչև բոլորը ավարտենzip
– հոսքերը համադրում է ըստ կարգի combineLatest([ of(1), interval(1000).pipe(take(3)) ]).subscribe(console.log);