Holen Sie string-Wert aus Beobachtbaren<string> in Maschinenschrift und Eckig
Möchte ich, um string-Wert aus Beobachtbaren und Wert aus der Funktion an den Aufrufer der Funktion.
ZB:
Ich habe die array-Schlüssel und würde gerne Hole den Wert (string), alle Schlüssel nacheinander und Anzeige von html-Komponenten die Menüleiste.
Hier sind die ts-Dateien:
- Schlüssel-Liste.Komponente.ts
public data = [ { 'key': 1, 'value' : this.getValue(1)},
{ 'key': 2, 'value' : this.getValue(2)},
...
];
private getValue(key: number): string {
return this.keyService.find(key).subscribe(response => {
return response;
});
}
keyService.ts
...
public find(key:number): Observable<any> {
return this.http.get(`/api/keys/${key}`).map(res => res.json() || {});
}
...
Möchte ich zur Anzeige aller Werte in der html-Komponente.
Aber immer Fehler in der Schlüssel-Liste.Komponente.ts, die beobachtbare in Typ string.
Wie kann ich lösen dieses Abonnement methodolgy und stellen Sie sicher, dass getValue sollte immer eine Zeichenkette zurückgeben, und machen es einwandfrei.
Einer der Lösung ist:
private getValue(key: number): string {
let result: string;
this.keyService.find(key).subscribe(res => result = res);
return result;
}
Die oben genannte Lösung funktioniert nicht immer.
Was sind die alternativen Lösung für diese Art von problem?
data
ist falsch. Das ist nicht, wie die Verwendung von asynchronen Funktionen.
InformationsquelleAutor virsha | 2017-08-12
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sie versuchen, zurück
Observable
aus-FunktiongetValue
, undreturn response
oderreturn result
wird nicht funktionieren, weil die Anfrage fürhttp.get
ist asynchrone.Hier sind einige Optionen, was Sie tun können:
Option1: mit Async Rohr auf Ihre Vorlage zu abonnieren Ergebnis
http.get
und entfernen Sie abonnieren Teil aus der FunktiongetValue
.Option2: Definieren Sie die array -
data
ohnevalue
Feld und aktualisieren Ihren Wert Feld später. Aber seien Sie vorsichtig, dass dievalue
Feldundefined
es sei denn, Sie bekommen Antwort vomthis.keyService.find(key)
.Hoffe, das wird helfen.
UPDATE von OP
Mit einigen geringfügigen änderungen in den oben genannten option1 klappte es dann.
Hier sind die änderungen:
Danke für die Erinnerung nutzen Async Rohr @Pengyy (Aus OP)
InformationsquelleAutor Pengyy