Javascript+;运行函数X秒

Javascript+;运行函数X秒,javascript,Javascript,有没有办法在Javascript中在5秒内运行我的函数 例如,如果我有功能A和功能B。我想运行功能A5秒钟,紧接着,它将运行功能B 如果功能A只需1秒即可完成该过程,则只需再等待4秒 但是如果功能A需要3秒钟才能完成,那么在处理功能B 如果功能A花费的时间超过5秒,则B需要等待A完成其工作,直到可以开始其工作。(编辑) 现在,我正在使用我不久前发现的睡眠功能 function wait(ms){ var start = new Date().getTime(); var end

有没有办法在
Javascript
中在5秒内运行我的函数

例如,如果我有
功能A
功能B
。我想运行
功能A
5秒钟,紧接着,它将运行
功能B

  • 如果
    功能A
    只需1秒即可完成该过程,则只需再等待4秒
  • 但是如果
    功能A
    需要3秒钟才能完成,那么在处理
    功能B
  • 如果
    功能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);
函数等待(毫秒){
var start=new Date().getTime();
var结束=开始;
同时(结束<开始+毫秒){
end=新日期().getTime();
}
}
等待(5000);
但使用此代码时,无论函数A需要多少时间来完成其过程,它都需要等待5秒钟

编辑

函数A
执行
ajaxpost
调用。这使得它需要不同的时间来完成它的工作

这个问题与其他问题不同,因为:

  • 这将用于不支持承诺的IE(如我所读)
  • 如果我使用settimeout,并且A花费的时间超过5秒,那么B将首先启动它的功能,而不必等待A完成

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

  • 如果
    函数A
    是异步的(例如发送AJAX请求并等待回复),只需使用
    设置超时
    ,因为请求将在后台完成,而不会冻结主进程。因此,
    funcA()
    将立即在UI线程上运行,然后下一个表达式将立即发生(等待5秒),然后在完成响应获取时调用来自AJAX响应的回调

    funcA();
    setTimeout(funcB, 5000);
    
  • 如果由于其他原因,
    函数A
    最多需要5秒,并且您需要更动态的等待,您可能需要计时并减去:

    var startTime = new Date().getTime(), endTime;
    funcA();
    endTime = new Date().getTime();
    setTimeout(funcB, 5000 - (endTime - startTime));
    
  • 如果
    功能A
    可能需要5秒以上的时间,而
    功能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));
        }
      });
    }
    

  • 你不是说函数a需要7秒钟吗?函数a正在执行异步工作吗?还是因为其他原因需要1秒?setTimeout、setInterval、$evalAsync、$applyAsync,网络工作者可以完成这项工作setTimeout()和promise()的组合应该可以。@casraf@Juhana
    函数a
    是Ajax
    POST
    调用,它可以在不同的时间完成这项工作,取决于进程。如果
    funcA
    需要5001(或更多)毫秒才能完成该怎么办<代码>等待时间=5000-(结束时间-开始时间);如果(waitTime<0){waitTime=0;}@aifrim没有必要,因为负超时会自动转换为最小值。如果使用第一种方法,但Function需要5秒以上才能完成,会发生什么。Func B会在不等待Function回复的情况下先完成其工作吗?是的,会的。如果你真的想深入了解它,你可以使用某种反映任务是否完成的条件,每隔几毫秒重试一次,直到响应正确为止。@alfrim不,如果它执行异步操作,它实际上不会等待任务完成后再继续执行任务。