Являются ли JavaScript вечно ожидающие обещания плохими?
Скажи, у меня есть обещание под названиемmyProm
и сказать, что у меня есть обработчики успеха и ошибок под названиемonSuccess
а такжеonError
.
Всякий раз, когда мое обещание занимает больше 10 секунд, я хочу функциюtimeoutHandler
должно быть выполнено, но если это произойдет, ниonSuccess
ниonError
должно быть выполнено. (Точно так же, если либоonSuccess
или жеonError
работает, я не хочу, чтобы мойtimeoutHandler
быть выполненным.)
Я придумал следующий фрагмент для этого.
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);
Однако, в случае тайм-аута, мое новое определенное обещание будет всегда. Может ли это иметь негативные побочные эффекты? Например, среда выполнения не может очистить объект Promise, потому что он все еще ожидает (или что-то в этом роде).