Jak wymusić sekwencyjne wykonanie Javascript?
Znalazłem dość skomplikowane odpowiedzi dotyczące klas, procedur obsługi zdarzeń i wywołań zwrotnych (które wydają mi się nieco podejrzane). Myślę, że wywołania zwrotne mogą być przydatne, ale nie wydaje mi się, aby zastosować je w najprostszym kontekście. Zobacz ten przykład:
<html>
<head>
<script type="text/javascript">
function myfunction() {
longfunctionfirst();
shortfunctionsecond();
}
function longfunctionfirst() {
setTimeout('alert("first function finished");',3000);
}
function shortfunctionsecond() {
setTimeout('alert("second function finished");',200);
}
</script>
</head>
<body>
<a href="#" onclick="javascript:myfunction();return false;">Call my function</a>
</body>
</html>
W tym przypadku druga funkcja kończy się przed pierwszą funkcją; jaki jest najprostszy sposób (a może taki?), aby wymusić opóźnienie wykonania drugiej funkcji do momentu zakończenia pierwszej funkcji?
---Edytować---
To był przykład bzdury, ale dzięki Davidowi Hedlundowi widzę w tym nowym przykładzie, że jest on rzeczywiście synchroniczny (wraz z awarią przeglądarki w procesie testowym!):
<html>
<head>
<script type="text/javascript">
function myfunction() {
longfunctionfirst();
shortfunctionsecond();
}
function longfunctionfirst() {
var j = 10000;
for (var i=0; i<j; i++) {
document.body.innerHTML += i;
}
alert("first function finished");
}
function shortfunctionsecond() {
var j = 10;
for (var i=0; i<j; i++) {
document.body.innerHTML += i;
}
alert("second function finished");
}
</script>
</head>
<body>
<a href="#" onclick="javascript:myfunction();return false;">Call my function</a>
</body>
</html>
Ponieważ mój RZECZYWISTY problem dotyczył jQuery i IE, będę musiał wysłać osobne pytanie na ten temat, jeśli sam nie będę mógł się nigdzie dostać!