首页 > 解决方案 > 用回调调用超时

问题描述

function fn1() {
  setTimeout(() => {
    console.log('hello');
  }, 5000);
}

function fn2() {
  setTimeout(() => {
    console.log('goodbye');
  }, 3000);
}

a) 如何使用回调修改上述函数,使其可以先打印“hello”,然后打印“goodbye”。b)我想然后打印“再见”然后“你好”,然后只想打印“完成”。如何通过回调来做到这一点。

标签: javascriptecmascript-6

解决方案


我不确定我是否正确理解了您的问题,但这是否是您正在寻找的更多内容?

    function fn1(callback) {
      setTimeout(() => {
        console.log('hello');
      }, 2999);
      callback();
    }

    function fn2() {
      setTimeout(() => {
        console.log('goodbye');
      }, 3000);
    }

    fn1(function() {
        fn2();
         setTimeout(function() {
            console.log("completed");
         }, 3001)
    });

如果是这样,那么您必须正确设置超时值,如果您希望它们按该顺序打印,请记住这些值也应该是连续的,否则您必须为 fn2 和以下设置新的超时console.log('Completed'),如下所示:

    function fn1(callback) {
      setTimeout(() => {
        console.log('hello');
      }, 5000);
      callback();
    }

    function fn2() {
      setTimeout(() => {
        console.log('goodbye');
      }, 3000);
    }

    fn1(function() { // callback
        setTimeout(function() { // timeout so fn2 fires once fn1 delay is finished
            fn2();
            setTimeout(function() {
                // add your console.log("completed"); or third function
                // here so it fires right after fn2
             }, 3001); // 3000 fn2 timeout + 1ms more so it fires right after
        }, 2001); // the difference between fn1 timeout - fn2 timeout + 1ms so it fires right after
    });

推荐阅读