有没有办法在Javascript
的5秒内运行我的功能?
例如,如果我有Function A
和Function B
。我希望运行Function A
5秒钟,就在它之后,它将运行Function B
。
Function A
只需1秒钟即可完成整个过程,然后只需等待4秒钟。 Function A
需要3秒钟才能完成,那么在处理Function B
Function A
需要超过5秒,那么B需要等到A完成其工作,直到它可以开始工作。 (编辑)的现在,我正在使用我很久以前发现的睡眠功能
function wait(ms){
var start = new Date().getTime();
var end = start;
while(end < start + ms) {
end = new Date().getTime();
}
}
wait(5000);
但是使用此代码,无论Function A
需要多长时间完成其过程,都需要等待5秒。
编辑
Function A
拨打AJAX POST
电话。这使得完成工作需要不同的时间。
这个问题与What is the JavaScript version of sleep()?不同,因为:
答案 0 :(得分:3)
我看到了这些最简单的方法:
如果Function A
是异步的(例如发送AJAX请求并等待回复),只需使用setTimeout
,因为请求将在后台完成,而不会冻结主进程。所以funcA()
将立即在UI线程上运行,然后下一个表达式将立即发生(等待5秒),然后只要它完成就会调用AJAX响应的回调获取回复。
funcA();
setTimeout(funcB, 5000);
如果由于其他原因导致Function A
需要5秒钟,并且您需要等待更加动态,您可以将其计时并减去:
var startTime = new Date().getTime(), endTime;
funcA();
endTime = new Date().getTime();
setTimeout(funcB, 5000 - (endTime - startTime));
如果Function A
可能需要超过5秒,并且Function B
需要等待,我建议类似于此:
function funcA() {
var startTime = new Date().getTime(), endTime;
// ... code ...
$.post(..., {
...,
// when done/resolved the AJAX request ->
success: function(response) {
endTime = new Date().getTime();
setTimeout(funcB, 5000 - (startTime - endTime));
}
});
}