¿Son malas las promesas pendientes de JavaScript para siempre?
Digamos que tengo una promesa llamadamyProm
, y digo que tengo controladores de errores y éxito llamadosonSuccess
yonError
.
Siempre que mi promesa tarde más de 10 segundos en completarse, quiero una función llamadatimeoutHandler
para ser ejecutado, pero si eso sucede, tampocoonSuccess
nionError
debe ser ejecutado (Del mismo modo, si cualquieraonSuccess
oonError
corre, no quiero mitimeoutHandler
ser ejecutado)
Se me ocurrió el siguiente fragmento para esto.
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);
Sin embargo, en caso de un tiempo de espera, mi promesa recién definida estará pendiente para siempre. ¿Podría esto tener algún efecto secundario negativo? Por ejemplo, el tiempo de ejecución no puede limpiar el objeto Promise porque todavía está pendiente (o algo por el estilo).