在setTimeout中调用多个函数

问题描述 投票:4回答:2

我想在JavaScript中的一个setTimeout()末尾调用两个函数。是否有可能,如果“是”哪一个将首先执行?

setTimeout(function() {
    playmp3(nextpage);
    $.mobile.changePage($('#' + nextpage));
}, playTime);
javascript jquery jquery-mobile
2个回答
15
投票

可能吗?

是的,为什么不呢? 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()


如果您对上面的代码有疑问,那么您的任何一个函数都包含异步代码(setInterval()setTimeout(),DOM事件,WebWorker代码等),这会让您感到困惑。

  • async here代表不按特定顺序发生的异步意义

0
投票

我已经使用了这种语法,它工作正常:

$('#element').on('keypress change', function (e) {
   setTimeout(function () { function1(); function2(); }, 500, $(this));
});
© www.soinside.com 2019 - 2024. All rights reserved.