Мы сохраняем ссылку setTimeout
, чтобы иметь возможность отменить ее в будущем. когда мы вызываем clearTimeout
, он немедленно выведет его из очереди обратного вызова
или
будет ждать очереди обратного вызова и предотвратить его запуск в этот момент времени
вот пример, чтобы уточнить, что я имею в виду;
var a = setTimeout(()=>console.log("a"),1000);
var b = setTimeout(()=>console.log("b"),2000);
let isCancelled = false;
var c = setTimeout(()=>console.log("c"),2000);
var d = setTimeout(()=>{
if(!isCancelled)
console.log("d")
},2000);
clearTimeout( c ); // "c" won't show
isCancelled = true; // "d" won't show too
моя интуиция заключается в том, что каким-то образом (например, с помощью флага или чего-то еще) он будет ждать своей очереди и не будет запускаться, вместо того, чтобы немедленно удалять его из очереди, так как он очередь и поиск элемента требуют посещения всех элементов до тех пор, пока он не найдет элемент, который в худшем случае равен O(n)
, затем удалит элемент, исправит указатели (например, двойные списки ссылок), и здесь мы go удалили его немедленно; Но это неэффективно, так как это должно происходить в самых основных частях языка (событие l oop и другие вещи), где мало времени, а предотвращение этого будет O(1)
просто оператором if
; но ждать своей очереди некрасиво и не кажется таким умным;
Итак что вы думаете, ребята? который из? или, может быть, другой подход к этому?
заранее спасибо;