如何使用回调使函数在setTimeout条件中接连执行

时间:2019-05-20 20:26:02

标签: javascript

我有一些可以被这种情况模仿的代码

function abc(def){
    setTimeout(1500,function(){
        console.log('1');
    }
    def();
}

function def(){
    console.log('2'}
}

我希望在2之后打印1-我该怎么做?

4 个答案:

答案 0 :(得分:0)

如果您希望在延迟后也调用函数,只需将其放在延迟内即可。我添加了一些额外的控制台日志并修复了一些代码。运行以下示例以查看其工作原理。

function def() {
  console.log('2 - def()');
}

function abc() {
  console.log('before');
  setTimeout(function() {
    console.log('1');
    def();
  }, 1500);
  console.log('after');
}



abc();

答案 1 :(得分:0)

function abc(def){
   setTimeout(1500,function(){
       console.log('1');
       def();
   }
 }

答案 2 :(得分:0)

您可以使用asyncawait。将setTimeout(...)包装在Promise中,然后在传递给setTimeout的回调中解析Promise。

async function abc(def){
    await new Promise(res => {
      setTimeout(function(){
        console.log('1');
        res();
      },1500)
    })
    def();
}

function def(){
    console.log('2')
}
abc(def)

答案 3 :(得分:0)

setTimeout(function, milliseconds)将具有第一个参数和延迟值(时间以毫秒为单位)的函数作为第二个参数。您以错误的顺序传递了他们。

在您的示例中def()也正在打印2并且它在setTimeout函数之外,因此它不可能在1之后打印2(因为1被记录在setTimeout内部,这意味着它将在延迟后执行) 1.5秒)。

上面Chris提供的解决方案是正确的,并且可以按照您的要求进行(打印2,然后打印1)