2016-10-19 8 views
1

ionic2のホームタブで観測値を取り消そうとしていますが、それは6時間後には何も機能していないため、そこにバグがある可能性があります。私が試したionic2/angualr2ホームタブでの観測値のキャンセル

ngZoneから

私が使用している観察可能な例は、あなたが、私はngZoneを試してみたこのサイト https://coryrylan.com/blog/intro-to-rxjs-observables-and-angular-2

からすることができないで明確な間隔、

ionViewWillLeave() { 
     this.disposable.dispose(); 
     clearInterval(this.home_game_timer); 

    } 

何も動作しません.. コードは...このコードはホームタブにあります

getGame(){ 

var link = 'https://gamerholic.com/******'; 
var data_post = JSON.stringify({game:this.game,uid:this.data.uid,device:this.device_id,session:this.session}); 
let headers  = new Headers({ 'Content-Type': 'application/json' }); // ... Set content type to JSON 
let options  = new RequestOptions({ headers: headers }); // Create a request option 

return this.http.post(link, data_post, options) // ...using post request 
.map(data => data.json()) 
.catch(this.handleError) 
.subscribe((data) =>{ 
    this.game_data = data 

    if(this.game_data.success){ 
    this.game = this.game_data.games[0].id, 
    this.game_data = this.game_data.games[0] 
     this.gameStream$ = new Observable(observer=>{ 
      this.home_game_timer = setInterval(()=>{ 

       if(this.gone<1){ 
       var link = 'https://gamerholic.com/****'; 
       var data = JSON.stringify({game:this.game,uid:this.uid}); 
       let headers = new Headers({ 'Content-Type' : 'application/x-www-form-urlencoded; charset=UTF-8' }); 
       let options = new RequestOptions({ headers: headers }); 
       return this.http.post(link, data,options) 
       .map(data => data.json()) 
       .catch(this.handleError) 
       .subscribe((data) =>{ 
        var d = data 
        observer.next(d) 
       }) 
       } 

      },1000) 

      return(()=>{ 
       clearInterval(this.home_game_timer); 
      }) 
     }) 

     this.disposable = this.gameStream$.subscribe((data)=>{ 
     this.timer_data = data 
     this.list_players = data 
     console.log(this.timer_data) 
     }) 

     } 
    }) 

} 

答えて

0

監視対象を取り消したい場合は、監視対象からの退会が必要です。あなたがやっていることは、ティアダウンの論理を持っているオブザーバブルを作ることです。ここまでは順調ですね。

return(()=>{ 
      clearInterval(this.home_game_timer); 
     }) 

このティップダウンロジックのスニペットは、ただし、あなたが明示的にオブザーバブルから退会するまで実行されません。したがって、clearIntervalを設定しますが、このメソッドは決して呼び出されません。なぜなら、observableは決してサブスクライブされないからです。あなたがすべきことは、実際にはある時点で購読を停止することです。

this.disposable = this.gameStream$.subscribe((data)=>{ 
    this.timer_data = data 
    this.list_players = data 
    console.log(this.timer_data) 
    }) 

this.disposable.unsubscribe(); // ==> this will trigger the teardown logic to be called 

あなたがこれを呼び出すことができる場所は、必要に応じて異なる場合があります。いつ呼び出される必要がありますか? コンポーネントが破棄されている場合は、破棄ライフサイクルフックを使用できます。私が見つけた

+0

試してみました...動作しません... – user2320607

0

仕事の周りは、私は私がサービスからサービス

this.globalService$.timer(this.page_view,this.device_id,this.game,this.uid) 
.map(data => data.json()) 
.catch(this.handleError) 
.subscribe(
     (data) =>{ 
     this.game_data = data 
     }) 

にページビューを渡すホーム]タブの[

this.page_view  = 'global' 
localStorage.setItem('page_view','global') 

をページビュー のローカルストレージを設定することです渡されたページビューとローカルストレージページビューを一致させる

timer(page_view,device_id,game,uid){ 

let pv = localStorage.getItem('page_view') 
if(page_view==pv){ 

    var link = 'https://gamerholic.com/****'; 
    var data_post = JSON.stringify({game:game,uid:uid,device:device_id}); 
    let headers  = new Headers({ 'Content-Type': 'application/json' }); // ... Set content type to JSON 
    let options  = new RequestOptions({ headers: headers }); // Create a request option 
    return this.http.post(link, data_post, options) // ...using post request 

    } 
} 

今すぐt imerはページビューが一致する場合にのみ実行されます...

関連する問題