Javascript +运行X秒的函数

时间:2016-09-08 07:15:40

标签: javascript

有没有办法在Javascript的5秒内运行我的功能?

例如,如果我有Function AFunction B。我希望运行Function A 5秒钟,就在它之后,它将运行Function B

  • IF Function A只需1秒钟即可完成整个过程,然后只需等待4秒钟。
  • 但如果Function A需要3秒钟才能完成,那么在处理Function B
  • 之前还需要等待2秒钟
  • 如果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()?不同,因为:

  1. 这将在IE中使用,它不支持承诺(正如我所读)
  2. 如果我使用settimeout,并且A花费的时间超过5秒,那么B将首先触发它的功能而不等待A完成。

1 个答案:

答案 0 :(得分:3)

我看到了这些最​​简单的方法:

  1. 如果Function A是异步的(例如发送AJAX请求并等待回复),只需使用setTimeout,因为请求将在后台完成,而不会冻结主进程。所以funcA()将立即在UI线程上运行,然后下一个表达式将立即发生(等待5秒),然后只要它完成就会调用AJAX响应的回调获取回复。

    funcA();
    setTimeout(funcB, 5000);
    
  2. 如果由于其他原因导致Function A需要5秒钟,并且您需要等待更加动态,您可以将其计时并减去:

    var startTime = new Date().getTime(), endTime;
    funcA();
    endTime = new Date().getTime();
    setTimeout(funcB, 5000 - (endTime - startTime));
    
  3. 如果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));
        }
      });
    }