2017-08-09 5 views
0

Zunächst möchte ich erklären, dass ich eine Menge Antworten gelesen habe, und ich verstehe, dass es falsch ist, den Thread zu blockieren, um eine Antwort zu warten. Aber ich habe ein Problem, das nicht so einfach zu lösen ist.Warten auf Versprechen Angular 2

Ich habe ein fortgeschrittenes Projekt, wo ich eine Funktion auf einem Sitzungsdienst habe, der getAuthenticationKey():string ist Ich habe es viel aus verschiedenen Teilen des Codes (Restfunktionen, etc. aufrufen), und ich habe es als ein gewöhnliche Funktion, weil ich dachte, dass dieser Wert da sein wird oder nicht.

Jetzt haben wir einige Änderungen vorgenommen, und die muss eine Restfunktion aufrufen, um den Schlüssel zu aktualisieren, wenn es notwendig ist.

Also das Problem ist, dass ich verstehe, dass der beste Weg, dies zu tun ist, ein Versprechen zu machen und das ganze Projekt umgestalten, aber das ist zu teuer in Stunden, weil ich Versprechungen für diese Funktion und alle machen muss andere, die von dieser Funktion abhängen (fast alle Anwendungen), und in Anbetracht der Tatsache, dass die Aktualisierung eine schnelle Operation ist und einmal am Tag oder in der Woche aufgerufen wird, gibt es eine Möglichkeit, dies zu beheben, ohne das gesamte Projekt zu refaktorieren?

Antwort

0

Sie können Ihren Code wahrscheinlich so behalten, wie er ist, fügen Sie einfach einen periodischen Checker (setInterval(...)) hinzu, der die authenticationKey bei Bedarf aktualisiert. Wenn Sie die Lebensdauer des Schlüssels kennen, können Sie einfach setTimeout(...) anstelle der regelmäßigen Überprüfung verwenden.

+0

Ich muss den Schlüssel innerhalb des getAuthenticationKey aktualisieren, also muss ich auf den neuen Schlüssel in der Funktion warten, gibt es keine andere Möglichkeit, auf die Antwort zu warten? –

+0

Sie könnten eine synchrone XhrRequest verwenden, die jedoch nicht mehr unterstützt wird https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/Synchronous_and_Asynchronous_Requests So vermeiden Sie die Verwendung von Promise. Vielleicht, wenn Sie geschrieben haben, warum Sie die Auth-Taste im Hintergrund nicht aktualisieren können, könnte es helfen, eine Lösung zu finden. –

+0

In der Tat brauche ich, dass der "getAuthenticationKey" einen gültigen Schlüssel (überprüfen Sie es gegen einen Rest-Vorgang) zurückgibt, ohne die Zusage zu machen. Also muss ich das ganze Projekt nicht umgestalten. Wenn ich gewusst hätte, dass ich die Gültigkeit prüfen muss, wenn ich die "getAuthentitacionKey" -Funktion erstelle, hätte ich mit einem Versprechen getan, aber jetzt ist es ein Albtraum, einen Refactor zu machen. –

0

Ich löse dieses Problem mit einem Resolver, da ich die Authentifizierung überprüfen, wenn eine Seite geladen wird. Im Resolver überprüfe ich die Auth gegen einen Rest-Service und speichere das Ergebnis in einem Service.

Verwandte Themen