私は新しい角度になっているので、私は自分が望むものを達成するためのベストプラクティスを知りたいと思います。数値2に基づいた角2のリフレッシュhttpリクエスト
リクエストの間隔が必要な結果が得られるまで、APIをリクエストしたいと考えています。
gifts.service.ts:
import { Injectable } from '@angular/core';
import { URLSearchParams } from '@angular/http';
import { environment } from '../../../environments/environment';
import { Observable } from 'rxjs/Rx';
import 'rxjs/add/operator/map';
import 'rxjs/add/operator/catch';
import { ApiService } from './api.service';
import { Gift } from '../models';
@Injectable()
export class GiftsService {
constructor (
private apiService: ApiService
) {}
get(id): Observable<Gift> {
return this.apiService.get('/gifts/' + id)
.map(data => data);
}
...
api.service.ts
import { Injectable } from '@angular/core';
import { environment } from '../../../environments/environment';
import { Headers, Http, Response, URLSearchParams } from '@angular/http';
import { Observable } from 'rxjs/Rx';
import 'rxjs/add/operator/map';
import 'rxjs/add/operator/catch';
import { JwtService } from './jwt.service';
@Injectable()
export class ApiService {
constructor(
private http: Http,
private jwtService: JwtService
) {}
get(path: string, params: URLSearchParams = new URLSearchParams()): Observable<any> {
return this.http.get(path, { headers: this.setHeaders(), search: params })
.catch(this.formatErrors)
.map((res:Response) => res.json());
}
...
そして私
は、私は2つのネストされたサービス(GiftsServiceとApiService)を使用します次のようなコンポーネントでGiftsService.getを呼び出します。
this.giftsService.get(this.gift.id)
.subscribe(data => {
// if data.status != "ok" retry
})
更新
ここで私は
this.giftsService.get(this.gift.id)
.switchMap(data => data.status !== 'success' ? Observable.throw(new Error('status not successful')) : Observable.of(data))
.retryWhen(attempts => {
return Observable
.range(1,10)
.zip(attempts, function(i) {
return(i);
})
.flatMap(function(i) {
return Observable.timer(1000);
})
})
.subscribe((
data => {
this.gift = data
})
);
this.giftsService.get(this.gift.id) .subscribe(データ=> {// data.statusあれば!= "OK" は再試行し、エラー=>サービスを呼び出す...... =エラー } –
rxjs retrywhen演算子は次のように使用できます:http://stackoverflow.com/questions/40175255/angular2-rxjs-how-to-retry-from -inside-subscribe –