Sind JavaScript für immer ausstehende Versprechen schlecht?
Sag, ich habe ein Versprechen namensmyProm
, und sagen, ich habe Erfolgs- und Fehlerbehandlungsroutinen namensonSuccess
undonError
.
Wenn mein Versprechen länger als 10 Sekunden dauert, möchte ich eine Funktion namenstimeoutHandler
ausgeführt werden, aber wenn das passiert, wederonSuccess
NochonError
sollte ausgeführt werden. (Ebenso, wenn entwederonSuccess
oderonError
rennt, ich will mein @ nictimeoutHandler
ermordet werden.
Ich habe mir dazu das folgende Snippet ausgedacht.
new Promise((suc, err) => {
let outOfTime = false;
const timeoutId = window.setTimeout(() => {
outOfTime = true;
timeoutHandler();
}, 10000);
myProm.then(
(...args) => {
if (!outOfTime) {
window.clearTimeout(timeoutId);
suc(...args);
}
},
(...args) => {
if (!outOfTime) {
window.clearTimeout(timeoutId);
err(...args);
}
}
);
}).then(onSuccess, onError);
Im Falle einer Zeitüberschreitung bleibt mein neu definiertes Versprechen jedoch für immer aus. Könnte dies irgendwelche negativen Nebenwirkungen haben? Beispiel: Die Laufzeitumgebung kann das Promise-Objekt nicht bereinigen, da es noch aussteht (oder ähnliches).