在setTimeout中调用多个函数

时间:2015-04-24 06:14:39

标签: javascript jquery jquery-mobile

我想在JavaScript中的一个setTimeout()末尾调用两个函数。 是否可能,如果"是"哪一个会先被执行?

setTimeout(function() {
    playmp3(nextpage);
    $.mobile.changePage($('#' + nextpage));
}, playTime);

3 个答案:

答案 0 :(得分:14)

  

有可能吗?

是的,为什么不呢? setTimeout采用回调函数作为第一个参数。事实上它是一个回调函数并没有改变任何东西;通常的规则适用。

  

首先执行哪一个?

除非您使用基于Promise或基于回调的代码,否则Javascript会按顺序运行,因此您的功能将按照您记下的顺序进行调用。

setTimeout(function() {
  function1() // runs first
  function2() // runs second
}, 1000)

但是,如果你这样做:

setTimeout(function() {
  // after 1000ms, call the `setTimeout` callback
  // In the meantime, continue executing code below
  setTimeout(function() {
    function1() //runs second after 1100ms
  },100)

  function2() //runs first, after 1000ms
},1000)

然后订单发生变化,因为setTimeout异步,在这种情况下,它会在计时器到期之后被激活(JS继续并执行function2() in同时)

如果你的上述代码有问题,那么你的任何一个函数都包含 async 代码(setInterval()setTimeout(),DOM事件,WebWorker代码等),这会让人感到困惑你。

  • async 此处代表异步,表示未按特定顺序发生

答案 1 :(得分:0)

我使用了这种语法,并且效果很好:

$('#element').on('keypress change', function (e) {
   setTimeout(function () { function1(); function2(); }, 500, $(this));
});

答案 2 :(得分:0)

5这对我来说就像是一种魅力(单击元素后会触发多个功能):

const elem = document.getElementById("element-id");
    function parent(){
         elem.addEventListner("click", func1);
              function func1(){
                   // code here
                 setTimeout(func2, 250) //func2 fires after 200 ms
                  }
              function func2(){
                   // code here
                 setTimeout(func3, 100) //func3 fires 100 ms after func2 and 350 ms after func1
                  }
               function func3(){
                   // code here
                  }
    }
    parent():