2017-05-16 13 views
0

Observableを使用してHTTPリクエストでタイムアウトを設定できるかどうかは誰でも知ることができます。私のコードは次のとおりです。 私のデータがマイ・ウェブAPI(またはバックエンドサーバー)ビューでデータを更新したい場合、ユーザーは新しいことが起こっていることを知ることができます...十分に明確であることを希望します...理解できない場合は質問してください...または別の可能性次のとおりです。機能はいくつかの変更があるかどうかを確認するために、サーバーへの新しいコールを作ることができる毎分は...ObservavableとAngular 4のsetTimeoutを組み合わせると、

export interface User { 
name: any[]; 
data: any[]; 
    } 

const userURL = 'http://my.apiserver.com'; 



@Injectable() 
export class UserService { 



users: Observable<User[]> 
    constructor (public http:Http) { 
     this.users = http.get(usersURL) 
        .retry(3) 
        .map(res => [res.json()]); 

} 
+0

で始めることができますが、ロングポーリングのようないくつかの機能を構築したいですか? – Akkusativobjekt

+0

それで、定期的にテストしますか?あなたは 'setInterval'を意味しましたか? – Meir

+0

通常、サーバー間の通信はWebソケットで処理されます。 – echonax

答えて

1

あなたがtimerswitchの演算子を使用することができます

を210
this.users = Observable.timer(1000) 
    .switch(() => http.get(usersURL).retry(3)) 
    .map(res => [res.json()]) 
+0

ありがとう@Meirは大丈夫ですが、この状態では動作しません。あなたのコードを少し変更しなければならないかもしれません....上に目を向けてください... –

+0

rxjsのバージョンを確認してください。 v5には異なる演算子名があります。 retry(3)を削除して、動作しているかどうか確認してください。また、各状態の後に '.do()'コールを追加して、フローを確認してください – Meir

+0

rxjs 5.0.1を使用しています....実際にあなたのコードを試しています; –

0

たぶん、あなたはその

private dataState = 'NotInitialized'; 
    private data = new BehaviorSubject<myObject>(null); // You can also use an empty object instead of null => to avoid null reference exceptions in your calling code 


    getMyObject(): Observable<MyObject> { 
    if (this.dataState === 'NotInitialized'){ 
     this.dataState = 'Initialized'; 

     setInterval(() => { 
      this.http.get('myUrl') 
      .map(res => res.json()) 
      .do(res => this.data.next(res)) // Maybe you can check if object has changed 
      .subscribe(res => console.log(res)); // Subscribe is important! => otherwise, there is no consumption of this observable 
     }, 1000); 

    } 

return this.data; 
} 
+0

ありがとう@ deblaton-jean-philippe私はこれを試してみます –

関連する問題