What is an observable?
Introduction
Observable…….. yes its one of the most popular term that you will come across often, especially if you are an angular developer. Its a simple and powerful concept that gives a developer the power to execute asynchronous operations. In this article lets learn about what an observable is, its uses and some basic operations using observable in the industry.
What is an observable?
Observable is a very powerful and efficient class provided by the RxJS library which helps in handling the asynchronous functions and data streams. It is a reactive approach to combine, transform, manage and manipulate streams of data.
Any continuous stream of data can be declared as an observable and the user can subscribe to it and monitor the changes in the data that is subscribed to. In simple terms we can say that observable is something that we can observe the changes constantly and in real time.
Creating my first observable
Now lets see how an observable is created.
import { Observable } from 'rxjs';
const observeMe = new Observable(observer => {
setTimeout(() => {
observer.next('Hello Guys');
}, 2000);
setTimeout(() => {
observer.next('Hello Again');
}, 4000);
});
observeMe.subscribe(value => console.log(value));
In this code ‘observeMe’ is variable that is initialized with the constructor of Observable.
The next() function emits a value to the observer.
When we use subscribe() on observeMe, the observable starts listening and results in the output
Hello Guys // After 2 seconds
Hello Again // After 4 seconds
Other operators on observable
Now lets see how of() operator is used
import { of } from 'rxjs';
const numberObservable = of(1, 2, 3, 4);
numberObservable.subscribe(value => console.log(value));
Here the of() operator is used to convert a the fixed values into an observable by emitting them one by one. After converting the values into an observable, we can subscribe to it
Next is the map() operator
import { of } from 'rxjs';
import { map } from 'rxjs/operators';
const numberObservable = of(1, 2, 3, 4);
const squaredObservable = numberObservable.pipe(
map(value => value * value)
);
squaredObservable.subscribe(result => console.log(result));
Here the map() operator transforms the items emitted by an observable after applying the modification mentioned.
You must also have seen the pipe() method used in the code. It has a simple task of returning a new observable after applying the modifications done by the operators inside it.
Output:
1
4
9
16
Next is the filter() operator
import { of } from 'rxjs';
import { map, filter } from 'rxjs/operators';
const numberObservable = of(1, 2, 3, 4);
const oddNumberObservable = numberObservable.pipe(
filter((value) => value % 2 !== 0)
);
oddNumberObservable.subscribe(result => console.log(result));
In the above code, the filter() operator selectively emits only the items that satisfies the given condition.
1
3
Subscribing to an HTTP Request
HTTP request is one of the best scenario where we can utilize the power of an observable. It takes an undefined time frame to get the response of a HTTP request. By subscribing to the HTTP call we can keep on listening to the call without hindering any of the other program flow and also handle the data streams seamlessly over time.
Example:
import { HttpClient } from '@angular/common/http';
constructor(private http: HttpClient) {}
getData() {
this.http.get('/api/url').subscribe((response) => {
console.log('Response: ', response);
});
}
In this code the subscribe() method takes a callback function as an argument that handles the emitted response from the HTTP request.
Error Handling in observable
import { HttpClient } from '@angular/common/http';
constructor(private http: HttpClient) {}
getData() {
this.http.get('/api/url').subscribe((data) => {
console.log('Data: ', data);
},
(error) => {
console.log('Error: ', error);
});
}
Here subscribe() method takes a second callback function as an argument which handles any error that happens while listening to the observable.
Unsubscribe an observable
When we use subscribe() method to open a stream to listen to an observable it will remain open unless we unsubscribe it. It is always a best practice to unsubscribe observables in your code to prevent memory leaks and free up resources when no longer needed.
One way to unsubscribe is:
ngOnDestroy() {
this.observable.unsubscribe();
}
Conclusion
This article just gives the basics regarding an observable. There are a lot more to learn and explore regarding observable and RxJS library. Be sure to refer to https://rxjs.dev/guide/overview
So, that's all, guys!😉
Just keep learning!💪
Subscribe to my newsletter
Read articles from Joel Jose directly inside your inbox. Subscribe to the newsletter, and don't miss out.
Written by