2017-03-23 8 views
0

Ich habe eine Frage zu Angular2 und Observables. In einem Dienst möchte ich mit einem Observable (geladen von einem anderen Dienst) arbeiten und dann auch Daten als Observable zurückgeben.Angular 2: Arbeit mit Observable und Rückkehr Observable

Wie kann ich das tun? Ich habe diesen Code:

getEPGDayByChannel(channelID, newDate) { 
     let mydate = new Date(newDate.getFullYear(), newDate.getMonth(), newDate.getDate(), 0, 0, 0); 


      let fromDate = new Date(mydate.getFullYear(), mydate.getMonth(), mydate.getDate(), 0, 0, 0); 
      let endDate = new Date(mydate.getFullYear(), mydate.getMonth(), mydate.getDate(), 23, 59, 59); 
      this.apiService.getChannelEPGbyTime(channelID, fromDate, endDate). 
      subscribe(
      data => { 
       //do some magic with the data 
       // return some thing of the data as an observable 
       return Observable.of(data.programme); 
      }, 
      error => { this.variables.setFailure(error);} 
      ); 

    } 

Aber mit diesem Code bekomme ich diesen Fehler:

EXCEPTION: Uncaught (in promise): TypeError: this.epgService.getEPGDayByChannel(...) is undefined 

Unhandled Promise rejection: this.epgService.getEPGDayByChannel(...) is undefined ; Zone: angular ; Task: Promise.then ; Value: TypeError: this.epgService.getEPGDayByChannel(...) is undefined 

Ich würde für etwas Hilfe sehr freuen!

Antwort

2

Versuchen Sie folgendes:

getEPGDayByChannel(channelID, newDate) { 
    let mydate = new Date(newDate.getFullYear(), newDate.getMonth(), newDate.getDate(), 0, 0, 0); 


    let fromDate = new Date(mydate.getFullYear(), mydate.getMonth(), mydate.getDate(), 0, 0, 0); 
    let endDate = new Date(mydate.getFullYear(), mydate.getMonth(), mydate.getDate(), 23, 59, 59); 

    return this.apiService.getChannelEPGbyTime(channelID, fromDate, endDate) 
     .map(data => { 
      //do some magic with the data 
      // return some thing of the data as an observable 
      return data.programme; 
     }) 
     .catch(error => { 
      this.variables.setFailure(error); 
     }); 

} 
+0

wirklich so einfach ?? : D Es ist alles in Ordnung, vielen Dank! Verbrachte den ganzen Tag mit diesem ^^ Danke! – Junias

+0

@Junias Ja, so einfach ist es. Aber Sie müssen verstehen, dass die 'apiService.getChannelEPGbyTime' nicht aufgerufen wird, sobald Sie Ihre' getEPGDayByChannel' Methode aufrufen, sondern nur wenn Sie sie abonnieren. Ihr Code hat den apiService nur aufgerufen, ohne ihn zu abonnieren. – olivarra1

Verwandte Themen