Winkel 5 synchrone HTTP-Aufruf

Habe ich eine Eckige 5 Anwendung, in der ich noch zu nennen einige schwere REST-Dienst (dauert in der Regel einige Sekunden). Ich brauche das Ergebnis in anderen Teil der Anwendung, also ich möchte speichert das Ergebnis in einer DataStorageService.
Im Grunde ist dies würde ich gerne erreichen:

@Injectable()
export class DataStorageService {

private result: MyCustomObject;

constructor(private service: Service) {}

getResult(): MyCustomObject {
    if (typeof this.result === 'undefined') {
        //save result
    }
    return result;
}

Die Frage ist, wie kann ich warten, bis die HTTP-Anforderung abgeschlossen ist und dann speichern und zurück die 'Ergebnis' - Objekt. Ich habe versucht, es zu lösen, mit der Verheißung und Beobachtbar als gut, aber keiner von Ihnen hat gut funktioniert.

  1. Beobachten:

    if (typeof this.result === 'undefined') {
        this.service.call()
            .subscribe(response => this.result = response);
    }
    return this.result;  //wait for save and return MyCustomObject
    
  2. Versprechen:

    if (typeof this.result === 'undefined') {
        this.service.call()
            .toPromise()
            .then(response => this.result = response);
    }
    return this.result;  //wait for save and return MyCustomObject
    
  • Ihre getResult(): Promise<MyCustomObject> sollte auch wieder ein Versprechen/zu beobachten. Wird code die fehlende codes bei der Rückkehr vom Mittagessen. In der Zwischenzeit schauen Sie in github.com/ngrx/store vielleicht bringt eine neue Lösung für das problem.
  • Ich möchte vermeiden, eine Rückkehr zu Versprechen oder zu Beobachten. Ich brauche zu aggregieren, das Ergebnis in verschiedene Objekte nach geöffneten Seite. Dies würde mein code so hässlich, wenn ich immer zu abonnieren, um ein Versprechen. Statt mit einem einfachen Objekt.
  • Hinweis: um code-Klarheit und Wartung: Ihre Methode ist benannt getResult(), aber es ist eigentlich das Ergebnis speichern, so dass das Verhalten nicht mit dem Namen und führt zu Verwechslungen
  • Du hast Recht David. Ich schrieb es von Grund auf zum besseren Verständnis. Vielleicht ist es Wert, sich zu bewegen, die Funktion "speichern" in eine ngOnInit Methode.
  • Ich aktualisiert meine Frage, da das original war zu vieldeutig mit unnötigen codes. Tut mir Leid.
InformationsquelleAutor aszidien | 2018-03-23
Schreibe einen Kommentar