2017-02-09 117 views
0

我有几个关于Http.post和Http.get与 Observable的问题。我是一名学生,我正在尝试编写一个简单的WebApp和一个服务器。Angular 2,Observable: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

http拨打电话,特别是getpost返回一个可观察到的结果,因此您不需要退订。完成后,订阅将被终止。

+0

这正是我的想法,但你如何解释。如果我多次尝试没有if循环的getdata()方法。我有多个服务试图让数据everey 3秒?我在浏览器中试过它,它完全是这样的... –

+0

因为间隔每3000毫秒产生一个新的呼叫。可以这样做:'Observable.timeout(3000)'(一次延迟)或'Observable.interval(3000).take(1)' – Meir

+0

但是这是行不通的。也许我的解释不够好。我有一个WebApp和一个服务器。 WebApp在VisualCode上的浏览器和服务器上运行。在服务器上,我改变了属于汽车(虚拟)的数据。我在WebApp的html上有一个flipswitch,可以打开和关闭服务器和webapp之间的通信。如果我打开翻页开关,我会订阅一个每3秒从服务器接收一次数据的观察器。如果我切换它的observable应该是canceld。没有if循环,我会每次创建一个新的可观察对象。有没有另一种方法。 –