Ich habe einen Service, der Berichte erhält:
ReportsResource.getActiveUsers()
. Dies verwendet $http
und gibt dann ein Versprechen zurück.
ich es dann wie folgt verwenden:
var request = ReportsResource.getActiveUsers();
request.then(populateActiveUsersTable, handleError);
Aber ist der Haken, dass der Antrag die aktiven Benutzer auf dem Back-End-Bericht zu bekommen kann überall von ein paar Sekunden, bis mehr als 30 Minuten dauern.
Wenn Sie eine Anfrage und kein zwischengespeichert Bericht zur Verfügung zu stellen, erzeugt er den Bericht, und dann wartet die Anforderung von Daten (wieder 2 Sekunden oder 30 Minuten sein könnte) für diese Anforderung.
Wenn Sie eine Anfrage stellen und der Bericht gerade erstellt wird, wird eine Antwort zurückgegeben, die Ihnen sofort mitteilt, dass der Bericht noch nicht fertig ist. An diesem Punkt können Sie die Abfrage fortsetzen, um zu sehen, ob der Bericht fertig ist.
Wenn der Bericht fertig (zwischengespeichert) ist, wird die Antwort sofort mit den Berichtsdaten zurückgegeben.
Was ich brauche, ist die Anforderung in einem Timeout wickeln, die auf 10 Sekunden warten auf und brechen dann, wenn die Antwort länger dauert als 10 Sekunden abgeschlossen und beginnt Polling den Server zu fragen, ob der Bericht fertig ist noch. Wenn die Anforderung jedoch unter 10 Sekunden aufgelöst wird, sollte das Zeitlimit aufgehoben und die Versprechungskette wie normal ausgeführt werden.
Nicht wirklich sicher, wie man damit umgeht.
Ja, das wäre ideal, leider ist das eine architektonische Umsetzung, die im Rahmen dieser speziellen Arbeit nicht möglich ist. Wir haben eine Roadmap, um dorthin zu gelangen, aber es erfordert einige asynchrone Verarbeitungsänderungen am BE, was einige Auswirkungen hat usw. – AgmLauncher