U ovom ću blog postu pokazati kako koristeći RxJS Observable upravljati pozivanjem API-ja u određenim vremenskim intervalima.
Primjer se temelji na blog postu pod nazivom ‘Ionic 3 – Autocomplete polje za unos‘ kojeg sam objavio prije pola godine.
Prvo kreiram novu Ionic aplikaciju
1 2 |
$ ionic start Ionic3RxJS blank $ cd Ionic3RxJS |
Nakon toga mogu kreirati servis pod nazivom ApiProvider
1 |
$ ionic generate provider ApiProvider |
koji na početku izgleda ovako
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
import { Injectable } from '@angular/core'; import { Http } from '@angular/http'; import 'rxjs/add/operator/map'; @Injectable() export class ApiProvider { constructor(public _http: Http) { console.log('Hello ApiProvider Provider'); } loadData(){ return this._http.get('https://restcountries.eu/rest/v2/all') .map(res => res.json()); } } |
Gore se može vidjeti običan servis koji služi za pozivanje API-ja s popisom država. API će se pozvati isključivo nakon određene akcije korisnika. To može biti npr. na klik, prilikom otvaranja neke stranice unutar aplikacije ili na neki treći način.
Međutim, što napraviti ako želim u određenom vremenskom intervalu ponovno pozvati API kako bi se podaci osvježili bez da to korisnik mora učiniti?
U tom slučaju unutar servisa mogu definirati Observable.timer(x,x) koji prima dva parametra. Prvi parameter označava broj milisekundi nakon kojih će se API pozvati, a drugi označava svakih koliko milisekundi će se API ponovno pozvati.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
import { Injectable } from '@angular/core'; import { Http } from '@angular/http'; import 'rxjs/add/operator/map'; import { Observable } from 'rxjs'; @Injectable() export class ApiProvider { constructor(public _http: Http) { console.log('Hello ApiProvider Provider'); } timer = Observable.timer(0, 6000); loadData = () => { return this.timer .flatMap((i) => this._http.get("https://restcountries.eu/rest/v2/all")) .map(res => res.json()); } } |
U ovom slučaju API će prvi put dovući podatke bez odgode, a kasnije će to činiti svakih 6 sekundi. Posebno zanimljiva je i činjenica da će se API nastaviti pozivati čak i u slučaju kada aplikacije nije pokrenuta.
Za one koji žele znati više: