2017-03-06 3 views
0

Ich habe zwei Funktionen in einer Klasse, woObservable-Funktion in der gleichen Klasse in angular2 aufrufen

Erste Funktion gibt Observable zurück.

zweite Funktion ist von einer anderen Komponente namens

ich erste Funktion in der zweiten Verwendung der Wert der ersten nennen wollen, und es zu verarbeiten.

Beispielcode:

@Injectable() 
export class SampleService { 

service:string; 

getService(): Observable<any> { 
     return this._http.get(`url`, { 
      headers: this.headers() 
     }).map(res=>res.json();) 
      .catch(err=>console.log(err); 
    } 
} 


generateToken():string{ 
const service=""; 
this.getService().subscribe(res=>{service=res}); 
//process it 
return service; 
} 

Jedes Mal, wenn ich die zweite Funktion ist der Wert des Service rufe Rückkehr als empty.How abzuwarten, bis subscribe das ist vorbei, und dann verarbeiten.

+0

Es ist mir nicht klar, was '2)' genau bedeutet. –

+0

@ GünterZöchbauer bearbeitet Ich brauche beobachtbaren Wert in zweiter Funktion – Sreemat

+0

Was ist "zweite Funktion"? –

Antwort

0

Sie können einen Wert, den Sie von einer Observablen erhalten, nicht zurückgeben.

Sie entweder map im 2. Verfahren wie in der ersten Methode können und dann abonnieren, wo Sie generateToken

generateToken():string{ 
    return this.getService().map(res=>{return service=res}); 
} 

someMethod() { 
    this.generateToken.subscribe(res => this.service = res); 
} 

oder weisen Sie auf ein Feld in der zweiten Eigenschaft nennen

generateToken():string{ 
    return this.getService().subscribe(res=>{this.service =res}); 
} 

aktualisieren

someMethod() { 
    this.generateToken.subscribe(res => { 
    this.service = res; 
    // other code here 
    }); 
} 
+0

habe ich versucht das es auch nicht funktioniert. – Sreemat

+0

Ich möchte den Wert nicht in generateToken() – Sreemat

+0

zurückgeben Dann müssen Sie den Code hinzufügen, der den Wert innerhalb verwendet 'subscribe (...) ' –

0

Dies, weil die Rückkehr asynchron nicht zurück, bis er eine Antwort erhält abonnieren kommen:

generateToken():string{ 
    const service=""; 

    this.getService().subscribe(res=>{service=res}); //Async 

    return service; //Instant return of blank value 
} 

Ich würde vorschlagen, die beobachtbare selbst zurückkehren und abonnieren Sie es wo Sie es brauchen:

generateToken(){ 
    return this.getService().map(res => res.json()); //presuming json payload 
} 

Dann innerhalb Ihrer Komponenten nach dem Anfordern von sampleService im Konstruktor:

this.sampleService.generateToken().subscribe(data = > { //use data }); 
+0

Ich möchte generateToken mehr als einen Aufruf verwenden. – Sreemat

+0

Sie können dies immer noch in mehr als einem Anruf verwenden ... jede Komponente kann dies abonnieren. – chrispy

Verwandte Themen