【发布时间】:2018-09-13 16:27:07
【问题描述】:
我有 4 个函数要按顺序执行。
特别是第 4 个函数应该只在前面的 3 个函数都完成时才执行。
我尝试使用回调,但可以肯定我没有正确使用它。如何使其连续。
我听说过 JavaScript 中的 then 函数,但看起来它只适用于 ECMAScript 6(不确定),但是当我尝试在脚本中使用它时出现未定义的错误。
function longRunningFunction(callBack) {
setTimeout(function() {
$('#div1').html('Div1 Done');
}, 5000);
setTimeout(function() {
$('#div2').html('Div2 Done');
}, 5000);
setTimeout(function() {
$('#div3').html('Div3 Done');
}, 5000);
callBack();
}
longRunningFunction(function() {
setTimeout(function() {
$('#div4').html('But changes 1st!');
}, 3000);
});
#div4 {
font-weight: bold;
color: red;
}
#div1 {
margin-top: 20px;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="div4">
My content should be changes at last!
</div>
<div id="div1">
Div1
</div>
<div id="div2">
Div2
</div>
<div id="div3">
Div3
</div>
【问题讨论】:
-
你想让
Div2 Done在Div1 Done之后5000ms发生吗? -
把
callback()放在最后一个setTimeout()的末尾。我还建议使用队列而不是超时,因为它可以为您提供更多可扩展的控制。 -
@CertainPerformance,不。我只想在所有 3 个函数完成后进行回调。
-
您在尝试
then时遇到了什么错误? Promise 是您的方案的最佳解决方案,因此最好弄清楚您是否错误地使用它们,而不是想出一个不太可靠的替代方案。 -
@Simsons Promises 在所有当代浏览器中都原生支持。但它们不会神奇地出现,您需要显式创建一个 Promise(或调用一个这样做的函数)才能使用它的
.then()方法。
标签: javascript jquery html promise