回调超时

时间:2018-11-14 16:32:45

标签: javascript ecmascript-6

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

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

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

2 个答案:

答案 0 :(得分:1)

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

    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和后面的{{1 }},像这样:

console.log('Completed')

答案 1 :(得分:0)

请注意,当您将回调传递给另一个函数时,仅将引用传递给该函数(不执行该函数,因此不带括号())。 然后在返回时,我们检查是否通过了对该函数的引用(最好使用lodash或_ isFunction方法进行检查,因为如果foo不是函数,可能会导致错误)

const fn1 = (foo = false) => {
  setTimeout(console.log('goodbye'), 300);

  return foo && foo()
}

const fn2 = (foo = false) => {
  setTimeout( console.log('hello'), 500);
  
  return foo && foo()
}


fn1(fn2)
fn2(fn1)