2017-02-09 8 views
0

У меня есть несколько проблем, связанных с Http.post и Http.get с Observables. Я студент, и я пытаюсь написать простой WebApp и Server.Угловая 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(); 

    } 

Я пытался понять, учебники с наблюдаемыми характеристиками, но я не нашел как размещать данные на сервере без подписки на Observable.

Благодарим за помощь!

ответ

2

Звонки http, в частности get и post, возвращают наблюдаемое, которое завершается с результатом, поэтому вам не нужно отписываться. По завершении подписка прекращается.

+0

Это была моя мысль, но как вы объясните. Это, если я попробую метод getdata() без цикла if несколько раз. У меня есть несколько служб, которые пытаются получить данные everey 3 секунды? Я попробовал его в браузере, и это было именно так ... –

+0

Поскольку интервал генерирует новый вызов каждые 3000 мс. Либо сделайте так: 'Observable.timeout (3000)' (одна временная задержка) или 'Observable.interval (3000) .take (1)' – Meir

+0

Но это не сработает. Возможно, мое объяснение недостаточно. У меня есть WebApp и сервер. WebApp работает в браузере и на сервере на VisualCode. На сервере меняют данные, принадлежащие автомобилю (манекен). У меня есть flipswitch на html из WebApp, который должен включать и отключать связь между сервером и webapp. Если я включу флипсвитч, я подпишусь на наблюдаемый, который получает данные с сервера каждые 3 с. Если я переключу его на наблюдаемый, он должен быть канцелярным. Без цикла if я создавал бы новый наблюдаемый каждый раз. Есть ли другой способ. –

Смежные вопросы