Ich habe eine Situation, wo ich brauche einen Token auf einer cordova App erneut zu authentifizieren, bevor die Authentifizierungstoken abläuft. Um dies zu tun, dachte ich, ich würde eine Zeitüberschreitung setzen, bevor das Authentifizierungs-Token abläuft, um es erneut zu authentifizieren.Was passiert mit setTimeout, wenn das Fenster nicht im Fokus ist?
function authenticate() {
var token = ... get token
setTimeout(function() {
.. try to reauthenticate
}, token.expiresIn - 600*1000);
}
Problem konnte ich sehen ist, dass-
Die Timeout-Zeit abgelaufen ist, während die App schläft. Funktion feuert nicht?
Der Timeout „Countdown“ (wenn das ist, wie es funktioniert) angehalten wird, während die App schlafen.
Keine von beiden sind gute Szenarien. Meine Frage ist also, was passiert mit einem Timeout, während die Anwendung nicht im Fokus ist? Sollte ich stattdessen ein 10-Sekunden-Intervall haben, das den Ablauf für dieses Szenario überprüft?
Edit:
kann also sagen, dass das Token für 4 Stunden. Wenn der Benutzer die App für eine Stunde nutzt, sie für 2 Stunden minimiert und zurückkommt, ruft die Funktion eine Stunde oder 3 Stunden an? Dies wäre der Punkt des Intervalls, also kann ich die Situation relativ schnell überprüfen.
Sie werden das gleiche Problem mit dem Intervall erhalten. Warum nicht das Leben des Tokens erhöhen - vorausgesetzt, Sie haben die Kontrolle darüber? – Darren
Ich habe das nicht unter Kontrolle. –
Javascript läuft im selben Thread wie die Benutzeroberfläche des Browsers. Daher wird setTimeout oder setInterval nicht ausgeführt, um ausgeführt zu werden, wenn Sie aber einige Zeit später angeben. Web Workers könnte eine Möglichkeit sein, mit diesem Problem umzugehen. https://developer.mozilla.org/en-US/docs/Web/API/Web_Workers_API/Using_web_workers ein Beispiel verwendet wird, hier http://stackoverflow.com/questions/22043120/settimeout-from-a-web-worker –