"SwitchMap " working :
Here are the perfect example to understand working of "switchmap"
Suppose we have an input field that users can type into to search for books in a library. As the user types, we want to make an HTTP request to a server to get book suggestions based on the input. However, we don't want to make a new request for every keystroke, as that would be inefficient. Instead, we want to wait for the user to pause typing for a certain amount of time before making the request.
import statement for angular
import { fromEvent } from 'rxjs';
import { switchMap, debounceTime, distinctUntilChanged } from 'rxjs/operators';
import { ajax } from 'rxjs/ajax';
/* Get data from the search box */
const searchBox = document.getElementById('search-box');
const bookSuggestions$ = fromEvent(searchBox, 'input').pipe(
debounceTime(500), // wait 500ms after each keystroke
distinctUntilChanged(), // only emit if the value has changed
switchMap((event) => {
const searchQuery = (event.target as HTMLInputElement).value;
return ajax.getJSON(`https://mylibrary.com/books?q=${searchQuery}`);
})
);
bookSuggestions$.subscribe((books) => console.log(books));
In this example we first import all the necessary module in angular to achieve functionality of
switchmap. we first create an Observable from the
input
event of the search box using the fromEvent
function. We then use debounceTime(500)
to wait for 500ms after each keystroke before emitting the event. This ensures that we don't make a new request for every keystroke. We also use distinctUntilChanged()
to only emit events if the search query has changed.Finally, we use
switchMap
to transform the emitted events into an Observable that makes an HTTP request to the server using the ajax
function. If a new event is emitted while the previous request is still in progress, switchMap
will unsubscribe from the previous request and make a new one based on the new event. This ensures that we always get the most up-to-date search results.
No comments:
Post a Comment