2016-11-20 4 views
0

ich mit Intervalabonnieren mit Interval Rückruf beobachtbare nie feuern

return IntervalObservable.create(10000) 
    .startWith(0) // needs a value, but won't be used 
    .flatMap(() => this._http.get(eazyUrl)).map(res => res.text()) 

für eine beobachtbare zu abonnieren versuche ist dies der Code

var answer = this.LogService.getAdminHiererchy() 
     var Fdata: any; 
     answer.subscribe((response) => { 

      Fdata = response; 
      localStorage.setItem("AdminHiererchy", response); 
      console.log(Fdata); 

     }, 
      error => { 
       var err = error; 

       alert("error"); 
      } 

     ,() =>{this.readyFunc(Fdata);}) 

this.readyFunc ist nie Feuer abonnieren. just fine

return this._http.get(eazyUrl) 
     .map(res => res.text()); 

auch versucht schließlich ohne Glück arbeiten

answer.finally(() => this.readyFunc(Fdata)).subscribe((response) => {... 

auch mit Timer mit gleichen resualt versucht

return Observable.timer(0, 10000) 
    .flatMapTo(this._http.get(eazyUrl)).map(res => res.text());; 

wenn ich die intreval den Code entfernen Warum der Rückruf wird nicht ausgelöst, wenn interval verwendet wird

+0

Warum sollte der Rückruf aufgerufen werden? –

+0

, um die Daten zu behandeln, wenn es fertig ist – baaroz

+0

Der Rückruf ist das dritte Argument zum Abonnieren übergeben. Die erste wird aufgerufen, wenn ein Ereignis ausgegeben wird. Der zweite wird aufgerufen, wenn ein Fehler auftritt. Wann wird der dritte genannt? –

Antwort

0

Entfernen Sie die startWith(0), ich vermute, dass es Ihren Stream beendet, bevor Sie abonnieren.

Andere Optionen (seit IntervalObservable ist nicht dokumentiert und schwer in jsbin aufzurufen):

  1. Verwenden statt Observable.timer(1000).flatMap(...)
  2. Verwenden Observable.of(0).delay(1000).flatMap(...)
  3. .do(v => console.log(v)) hinzufügen nach jeder Zeile der ersten Methode:

    return IntervalObservable.create(10000) .do(v => console.log('stage 1: ', v) .startWith(0) // needs a value, but won't be used .do(v => console.log('stage 2: ', v) .flatMap(() => this._http.get(eazyUrl)).map(res => res.text()) .do(v => console.log('stage 3: ', v)

Verwandte Themen