【发布时间】:2010-12-23 23:17:31
【问题描述】:
我只找到了涉及类、事件处理程序和回调的相当复杂的答案(在我看来,这似乎是一种大锤方法)。我认为回调可能有用,但我似乎无法在最简单的情况下应用这些。看这个例子:
<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>
这里,第二个函数在第一个函数之前完成;什么是最简单的方法(或者有什么方法?)强制第二个函数延迟执行直到第一个函数完成?
---编辑---
所以这是一个垃圾示例,但感谢 David Hedlund,我在这个新示例中看到它确实是同步的(以及在测试过程中使我的浏览器崩溃!):
<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>
由于我的实际问题是 jQuery 和 IE,如果我自己无法解决问题,我将不得不发布一个单独的问题!
【问题讨论】:
-
我很高兴不是我在为此苦苦挣扎。我开始使用 nodejs 来处理日志文件。关于该处理的所有内容都决定了顺序操作,但我花了很多时间试图强制执行所需的序列。我发现承诺和所有“然后这个”“那么那个”的链接我们最终得到了不可读的代码。
标签: javascript asynchronous callback execution synchronous