Skip to content

Instantly share code, notes, and snippets.

@MiguelLattuada
Created January 3, 2017 15:02
Show Gist options
  • Save MiguelLattuada/66749efddb8779329165294016a939a1 to your computer and use it in GitHub Desktop.
Save MiguelLattuada/66749efddb8779329165294016a939a1 to your computer and use it in GitHub Desktop.
ES6 written, XMLHttpRequest wrapper for RxJS
class ApiRequest {
observableRequest(url) {
return Rx.Observable.fromPromise(this.__makeRequest(url, 'GET'));
}
__makeRequest(url, method) {
return new Promise((resolve, reject) => {
let xhr = new XMLHttpRequest();
Rx.Observable
.fromEvent(xhr, 'load')
.map(ev => ev.target)
.subscribe(req => {
if (req.status >= 200 && req.status < 300) {
resolve(req.response);
} else {
reject(req.statusText);
}
});
Rx.Observable
.fromEvent(xhr, 'error')
.map(ev => ev.target)
.subscribe(req => reject(req.statusText));
xhr.open(method, url, true);
xhr.send(null);
});
}
}
// Usage
new ApiRequest().observableRequest('http://pokeapi.co/api/v2/pokemon/1').subscribe(response => console.log(response));
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment