Reputation: 1
Originally, the error is handled as follows.
async getLists() {
try {
const list = await api.getList();
list.filter() ....
} catch(e) {
console.log(e)
}
}
How can I handle it using rxjs in the same situation?
I'm not familiar with rxjs, so I don't know if it's the answer, but the code I thought of is like this.
getLists() {
from(api.getList()).subscribe(
list => list.filter.....,
e => console.log(e)
)
}
I want to know how to handle all the errors that may occur when calling the API, such as try-catch, and the errors that may occur when processing the data received from the API after the API call.
Promises are being returned after API calls, but rxjs must be used If an error occurs, I want to unsubscribe.
Upvotes: 0
Views: 224
Reputation: 19
It seems your code is returning a promise, you can convert the promise to observable and subscribe to it as shown below.
If the API call is successful it will go to the next block and if any error occurs it will go to the error block.
Note :- defer allows you to create an Observable only when the Observer subscribes. It waits until an Observer subscribes to it.
defer docs - https://rxjs.dev/api/index/function/defer
const { defer, from } = require("rxjs")
async function getLists() {
return await fetch("https://jsonplaceholder.typicosde.com/users").then(response => response.json())
}
const observableFromPromiseFactory = defer(() => from(getLists()));
observableFromPromiseFactory.subscribe({
next: value => console.log(value),
error: err => console.error('Error->: ', err),
complete: () => console.log('Completed')
});
Upvotes: 0
Reputation: 187
You can use subscribe and handle subscribe error like this:
getLists() {
api.getList().subscribe(response => {
// do something with the response data
},
() => {
console.log('Error text');
})
}
let me know if it works for you.
Upvotes: 0
Reputation: 1204
So this should be a decent example of how to handle errors.
const getLists = getLists() {
from(api.getList()).pipe(catchError(error => of(`Bad Promise: ${error}`))
}
//output: 'Bad Promise: Rejected'
const subscribe = getLists.subscribe(val => console.log(val));
This is based on your example. You need to handle a promise, not an observable. (as mentioned by @Aakash Garg).
Upvotes: 1