2017-02-09 10 views
0

나는 Http.post와 Http.get에 관해서는 Observables로 몇 가지 문제가있다. 저는 학생이고 간단한 웹 애플리케이션과 서버를 작성하려고합니다. 서버.각도 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(); 

    } 

내가 Observables은 함께 튜토리얼을 이해하려고 노력하지만 난 방법 관찰에 가입하지 않고 서버에 데이터를 게시하는 를 찾지 못했습니다.

도움 주셔서 감사합니다.

답변

2

getpost은 결과로 완료되는 관찰 결과를 반환하므로 구독을 취소 할 필요가 없습니다. 완료되면 구독이 종료됩니다.

+0

그건 내 생각 이었지만 어떻게 설명하니? if 루프를 여러 번 사용하지 않고 getdata() 메서드를 사용하면됩니다. 3 초 동안 데이터를 얻으려고하는 여러 서비스가 있습니까? 브라우저에서 시도했는데 정확하게 그랬습니다. –

+0

간격이 매 3000ms마다 새로운 호출을 생성하기 때문에. "Observable.timeout (3000)'(1 시간 지연) 또는"Observable.interval (3000) .take (1) " – Meir

+0

그러나 이것은 작동하지 않습니다. 아마도 제 설명으로는 충분하지 않을 수도 있습니다. 나는 웹 애플리케이션과 서버를 가지고있다. 웹 애플리케이션은 VisualCode의 브라우저 및 서버에서 실행됩니다. 서버에서 나는 자동차 (더미)에 속하는 데이터를 변경했다. WebApp에서 html로 flip 스위치를 사용하면 서버와 webapp 간의 통신을 켜고 끕니다. flipswitch를 켜면 3 초마다 서버로부터 데이터를받는 observable을 구독합니다. 만약 내가 그것을 관찰 할 수 canceld 취소해야합니다. if 루프가 없으면 매번 새로운 관측 가능 항목을 생성합니다. 다른 방법이 있습니까? –