Angular RxJS Operators ที่ใช้บ่อย: map, filter, switchMap, combineLatest
#angular12 เม.ย. 2569
RxJS ใน Angular
Angular ใช้ RxJS อย่างหนักสำหรับ async operations ทำความเข้าใจ operators หลักๆ จะช่วยให้เขียนโค้ดได้ดีขึ้นมาก
map — แปลงค่า
import { map } from 'rxjs/operators';
this.http.get<User[]>('/api/users').pipe(
map(users => users.filter(u => u.active)),
map(users => users.map(u => u.name))
).subscribe(names => console.log(names));
filter — กรองค่า
import { filter } from 'rxjs/operators';
this.searchInput.valueChanges.pipe(
filter(value => value.length >= 3)
).subscribe(value => this.search(value));
switchMap — ยกเลิก request เก่า
เหมาะกับ search ที่ต้องยกเลิก request เก่าเมื่อพิมพ์ใหม่
import { switchMap, debounceTime } from 'rxjs/operators';
this.searchInput.valueChanges.pipe(
debounceTime(300),
switchMap(query => this.searchService.search(query))
).subscribe(results => this.results = results);
mergeMap — รัน parallel
import { mergeMap } from 'rxjs/operators';
from(userIds).pipe(
mergeMap(id => this.http.get<User>(`/api/users/${id}`))
).subscribe(user => console.log(user));
combineLatest — รวม observables
import { combineLatest } from 'rxjs';
combineLatest([
this.userService.getUser(),
this.settingsService.getSettings()
]).subscribe(([user, settings]) => {
this.user = user;
this.settings = settings;
});
forkJoin — รอทุก observable เสร็จ
import { forkJoin } from 'rxjs';
forkJoin({
users: this.http.get<User[]>('/api/users'),
posts: this.http.get<Post[]>('/api/posts')
}).subscribe(({ users, posts }) => {
this.users = users;
this.posts = posts;
});
takeUntilDestroyed (Angular 16+)
import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
export class MyComponent {
constructor() {
this.userService.getUsers().pipe(
takeUntilDestroyed()
).subscribe(users => this.users = users);
}
}
สรุป
map— แปลงข้อมูลfilter— กรองข้อมูลswitchMap— search, navigationmergeMap— parallel requestscombineLatest— รวมหลาย streamforkJoin— รอทุกอันเสร็จ