При каких обстоятельствах я хотел бы запустить короткую (ненулевую) задержку для вызова settimeout в Javascript? - PullRequest
1 голос
/ 03 июля 2019

В настоящее время я изучаю JavaScript и понимаю, что setTimeout отправляет вызов функции через API браузера в очередь (после истечения времени ожидания), после чего цикл обработки событий помещает функцию обратно в стек, как только стек очищено. Если я правильно понимаю, относительный порядок очереди будет зависеть от продолжительности таймаутов обратных вызовов, а также от продолжительности любых промежуточных функций.

В приведенном ниже коде

setTimeout(function(){ console.log("Hello"); }, 3000);
foo(); \\Some function of finite duration
setTimeout(function(){ console.log("World"); }, 3000);

Я ожидаю, что распечатка будет -

Hello 
World

- независимо от продолжительности foo ().

И для приведенного ниже кода с неравным временем ожидания

setTimeout(function(){ console.log("Hello"); }, 5000);
foo(); \\Some function of finite duration
setTimeout(function(){ console.log("World"); }, 3000);

Я считаю, что консоль может отображать либо -

Hello
World

- или -

World
Hello

- в зависимости от продолжительности foo ()

Итак, мой настоящий вопрос заключается в следующем: если мой обратный вызов все равно будет ждать, пока стек не очистится, и я хочу убедиться, что мой скрипт работает максимально эффективно, почему бы мне просто не использовать

setTimeout(function(){bar();},0);

для большинства моих обратных вызовов? Я могу избежать повторного заказа обратных вызовов в очереди, и они будут работать как можно скорее после очистки стека. Есть ли какая-то польза от вызова некоторого короткого конечного ненулевого времени ожидания, например, 5 мс?

1 Ответ

0 голосов
/ 03 июля 2019

Постановка в очередь также происходит при тайм-ауте, установленном на 0. Это означает, что «скоро возможно попка».Более короткое время не означает, что время будет точно таким, как установлено.Тайм-аут не надежен

...