角度2,可观察:http.post,http.get

角度2,可观察:http.post,http.get,http,angular,typescript,observable,Http,Angular,Typescript,Observable,我有一些关于Http.post和Http.get的问题 可观察到的。我是一名学生,我正在尝试写一个简单的网络应用程序和 服务器 如果我按下按钮,我想在我的服务器上发布一个布尔值。邮报 这个过程确实有效,但每次我按下按钮,我都会订阅另一次可观察的时间。我的http.get方法也有同样的问题,并用这段代码解决了这个问题 getdata() { if(this.subscribtion2 === null){ this.isValid = false; this.su

我有一些关于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();

   } 
我试图通过观察来理解教程,但没有找到答案 如何在服务器上发布数据,而不订阅可观察的


谢谢你的帮助

http调用,特别是
get
post
返回一个可观察的结果,因此不需要取消订阅。完成后,订阅将终止。

http调用,特别是
get
post
返回一个完成结果的可观察对象,因此您无需取消订阅。完成后,订阅将终止。

这正是我的想法,但您如何解释。如果我多次尝试不使用if循环的getdata()方法。我有多个服务试图每3秒钟获取一次数据?我在浏览器中尝试过,结果完全一样……因为间隔每3000毫秒生成一个新的调用。可以这样做:
Observable.timeout(3000)
(一个时间延迟)或
Observable.interval(3000)。取(1)
,但这不起作用。也许我的解释不够好。我有一个WebApp和一个服务器。WebApp在VisualCode上的浏览器和服务器中运行。在服务器上,我有属于汽车(虚拟)的更改数据。我在WebApp的html上有一个flipswitch,可以打开和关闭服务器与WebApp之间的通信。如果我打开flipswitch,我订阅一个observable,它每3秒从服务器接收一次数据。若我切换它,那个么可观察的部分应该被取消。如果没有if循环,我每次都会创建一个新的可观察对象。还有别的方法吗?你想要一个有开关的间隔触发器?为什么不创建一个间隔并过滤它呢?可观察的.interval(3000).filter(v=>fetchData).switchMap(…)。这样,如果您关闭fetchData,调用将不会被分派。我不太习惯于处理可观察对象,也是一个新手,对此表示抱歉。。。。fetchData是如何连接到http.get的?如果我“关闭”fetchData,oberservable是否被取消?我该如何做…:)?这正是我的想法,但你怎么解释呢。如果我多次尝试不使用if循环的getdata()方法。我有多个服务试图每3秒钟获取一次数据?我在浏览器中尝试过,结果完全一样……因为间隔每3000毫秒生成一个新的调用。可以这样做:
Observable.timeout(3000)
(一个时间延迟)或
Observable.interval(3000)。取(1)
,但这不起作用。也许我的解释不够好。我有一个WebApp和一个服务器。WebApp在VisualCode上的浏览器和服务器中运行。在服务器上,我有属于汽车(虚拟)的更改数据。我在WebApp的html上有一个flipswitch,可以打开和关闭服务器与WebApp之间的通信。如果我打开flipswitch,我订阅一个observable,它每3秒从服务器接收一次数据。若我切换它,那个么可观察的部分应该被取消。如果没有if循环,我每次都会创建一个新的可观察对象。还有别的方法吗?你想要一个有开关的间隔触发器?为什么不创建一个间隔并过滤它呢?可观察的.interval(3000).filter(v=>fetchData).switchMap(…)。这样,如果您关闭fetchData,调用将不会被分派。我不太习惯于处理可观察对象,也是一个新手,对此表示抱歉。。。。fetchData是如何连接到http.get的?如果我“关闭”fetchData,oberservable是否被取消?我该如何做…:)?