完成所有setTimeout函数后如何调用函数

时间:2017-05-20 14:40:57

标签: javascript jquery settimeout

如何在完成所有先前的功能后调用第二个函数。

function first() {
    // code here
    setTimeout( function() {
        // code here
    }, 1000);

    // code here
    setTimeout( function() {
        // code here
    }, 3000);

    // code here
    setTimeout( function() {
        // code here
    }, 3800);
}

function second() {
    // code here
}

first();
first();
second();
first();
second();

似乎所有功能都在同一时间执行。
非常感谢。

1 个答案:

答案 0 :(得分:0)

如果您需要在上次超时后调用特定功能,我认为这将指向正确的方向。当然,它可以写得更好,可重复使用" class"等



function myTimeout(f,t) {
    var p = new Promise(resolve=>{
      setTimeout(()=>{
        resolve(f.apply(this,[]));
    }, t);
    });
    

    //return p.promise(); 
  return p;
}

function first() {
    var numberOfTimeouts = 3
    // code here
    myTimeout(()=>{
        // code here
        console.log('a')
    }, 1000).then(()=>{
      numberOfTimeouts--;
      if (!numberOfTimeouts) second()
    });

    // code here
    myTimeout( function() {
        console.log('b')
    }, 3000).then(()=>{
      numberOfTimeouts--;
      if (!numberOfTimeouts) second()
    });

    // code here
    myTimeout( function() {
       console.log('c')
    }, 3800).then(()=>{
      numberOfTimeouts--;
      if (!numberOfTimeouts) second()
    });
}

function second() {
   console.log('d')
}

first();