2017-02-09 26 views
0

私は、 ObservablesでHttp.postとHttp.getに関するいくつかの問題があります。私は学生で、シンプルなWebAppと サーバーを作成しようとしています。角2、観測可能:http.post、http.get

ボタンを押すと、私のサーバーにブール値を送信したいと思います。ポスト のプロセスは機能しますが、私がボタンを押すたびに、私はオブザーバブルに別の時間を購読します。私はhttp.getメソッドで同じ問題を抱え、このコードの問題を解決しました。

getdata() { 
if(this.subscribtion2 === null){ 
     this.isValid = false; 
     this.subscribtion2 = this.service.get2().subscribe(

     daten => { 
      this.jsonobj = daten; 
      this.message = 
       [ 
       this.jsonobj.data.message1, 
       ]; 
      console.log('subscribe') 
      ; 
      this.myModelneu = this.message[0];  
      },  
     err => this.handleError(err), 
     () => console.log('Simple GET completed') 
      ); 

    }else 
    { 
     this.isValid = true; 
     console.log('unsubscribe') 
     this.subscribtion2.unsubscribe(); 
     this.subscribtion2 = null; 

    } 
} 

get2()メソッドは別のクラスにあります。

get2() { 


     return Observable.interval(3000) 
      .switchMap(() => this.http.get('http://127.0.0.1:3000/daten/2')) 
      .map(res => res.json()) 

    } 

私はそれが一般的な方法だとは思わないが、別のものを見つけることはできない。 マイhttp.postの外観はこれを好き:

post(json: boolean) { 
     console.log('post executed'); 
     console.log(JSON.stringify(json)); 

    return this.http.post('http://127.0.0.1:3000/login', { json }) 
    .subscribe(); 

    } 

私は観測とチュートリアルを理解しようとしたが、私は観察可能な契約をしなくても、サーバー上のデータをポストする方法 を見つけることができませんでした。

ありがとうございました!

答えて

2

getpostの呼び出しは、結果で完了する観察可能な情報を返します。したがって、退会する必要はありません。完了すると、サブスクリプションは終了します。

+0

これは私の考えでしたが、どのように説明しますか? ifループを何度も使わずにgetdata()メソッドを試してみてください。私は3秒間データevereyを取得しようとする複数のサービスがありますか?私はブラウザで試してみましたが、それはちょうどそのようなものでした... –

+0

間隔は3000ミリ秒ごとに新しい呼び出しを生成するためです。 'Observable.timeout(3000)'(1回の遅延)または 'Observable.interval(3000).take(1)' – Meir

+0

これはうまくいきません。おそらく私の説明は十分ではないでしょう。 WebAppとサーバーがあります。 WebAppは、ブラウザおよびVisualCode上のサーバーで実行されます。サーバーでは、私は車に属するデータを変更しています(ダミー)。私はウェブアプリケーションからのhtml上のフリップスイッチを持っています。これは、サーバとWebアプリケーションの間の通信をオンまたはオフにする必要があります。フリップスイッチをオンにすると、私は3秒ごとにサーバーからデータを受け取るオブザーバブルを購読します。私がそれを切り替えると、observableはキャンセルされるべきです。 ifループがなければ、毎回新しい観測値を作成します。別の方法がありますか? –

関連する問題