0

Ich arbeite mit kantigem 4.2.4/5.4.2 RxJS, und ich versuche, eine Service-Methode zu verwenden, um einige Daten abzurufen und diese Daten an eine Eigenschaft in meiner Komponente zuweisen:Wie kann sichergestellt werden, dass eine Funktion nach der Ausführung eines asynchronen Blocks zurückkehrt?

Komponente:

ngOnInit() { 
    this.componentProperty = this.myService.serviceMethod(someParameter); 
} 

Service:

serviceMethod(someParameter: someType) { 

    let returnValue: anotherType; 

    // getting the Observable involves using "someParameter" 
    // (the code was simplified for the sake of clarity) 
    someObservable.subscribe(
     data => { returnValue = data; } 
    ); 

    return returnValue;  
} 

Das Problem ist, dass die Funktion innerhalb subscribe() asynchron ausgeführt wird, so dass die Methode immer undefined zurückgibt.

Irgendwelche Gedanken, wie man das löst? Eine spezielle RxJS-Methode? Irgendein schickes ES.next Schlüsselwort, das mir nicht bekannt ist? Ein weiterer logischer Entwurf (der den SoC ordentlich und sauber hält)?

Vielen Dank im Voraus!

Antwort

1

Dienstleistungen Methoden sollten im Allgemeinen Rückkehr Werte, die Observable s oder Promise s sind.

Im Falle von Observable s Sie so etwas wie

serviceMethod(someParameter: someType) { 
    return getSomeObservable(someParameter); 
} 

in Ihrem Service und so etwas wie

ngOnInit() { 
    this.myService.serviceMethod(someParameter).subscribe(value => { 
    this.componentProperty = value; 
    }); 
} 

verbrauchen es in Ihrer Komponente schreiben würde.

1

Einfach verketten. Eine einfache Art und Weise:

return someObservable.subscribe(
     data => { call the function you want } 
    ); 
Verwandte Themen