As promessas com JavaScript pendente para sempre são ruins?
Digamos que tenho uma promessa chamadamyProm
e diga que tenho manipuladores de sucesso e erro chamadosonSuccess
eonError
.
Sempre que minha promessa demora mais de 10 segundos para ser concluída, quero uma função chamadatimeoutHandler
para ser executado, mas se isso acontecer, nemonSuccess
nemonError
deve ser executado. (Da mesma forma, seonSuccess
ouonError
corre, eu não quero o meutimeoutHandler
para ser executado.)
Eu vim com o seguinte trecho para isso.
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);
No entanto, no caso de um tempo limite, minha promessa recém-definida estará pendente para sempre. Isso poderia ter efeitos colaterais negativos? Por exemplo, o tempo de execução não consegue limpar o objeto Promise porque ainda está pendente (ou algo nesse sentido).