Одновременное использование setTimeout в JavaScript
У меня есть следующий сценарий:
setTimeout("alert('this alert is timedout and should be the first');", 5000);
alert("this should be the second one");
Мне нужен код после setTimeout
, который будет выполнен после выполнения кода в setTimeout. Поскольку код, который приходит после setTimeout
, не является моим собственным кодом, я не могу поместить его в функцию, вызванную в setTimeout...
Есть ли способ обойти это?
Ответы
Ответ 1
Является ли код, содержащийся в функции?
function test() {
setTimeout(...);
// code that you cannot modify?
}
В этом случае вы можете предотвратить выполнение функции от дальнейшего выполнения, а затем запустить ее снова:
function test(flag) {
if(!flag) {
setTimeout(function() {
alert();
test(true);
}, 5000);
return;
}
// code that you cannot modify
}
Ответ 2
Я пришел в ситуацию, когда мне нужна была аналогичная функциональность на прошлой неделе, и это заставило меня задуматься над этим сообщением. В принципе, я думаю, что "Занятое ожидание", на которое ссылается @AndreKR, будет подходящим решением во многих ситуациях. Ниже приведен код, который я использовал для взлома браузера и принудительного ожидания.
function pause(milliseconds) {
var dt = new Date();
while ((new Date()) - dt <= milliseconds) { /* Do nothing */ }
}
document.write("first statement");
alert("first statement");
pause(3000);
document.write("<br />3 seconds");
alert("paused for 3 seconds");
Ответ 3
Просто введите его в обратный вызов:
setTimeout(function() {
alert('this alert is timedout and should be the first');
alert('this should be the second one');
}, 5000);
Ответ 4
Нет, поскольку в Javascript нет функции задержки, нет способа сделать это иначе, чем ожидание (что заблокировало бы браузер).
Ответ 5
setTimeout(function() {
yourCode(); // alert('this alert is timedout and should be the first');
otherCode(); // alert("this should be the second one");
}, 5000);
Ответ 6
Вы можете попытаться заменить window.setTimeout своей собственной функцией, например
window.setTimeout = function(func, timeout) {
func();
}
Что может или не может работать должным образом. Помимо этого, ваш единственный вариант - изменить исходный код (который, как вы сказали, вы не сможете сделать)
Имейте в виду, что изменение собственных функций, подобных этому, не является точно очень оптимальным подходом.