function fn1() {
setTimeout(() => {
console.log('hello');
}, 5000);
}
function fn2() {
setTimeout(() => {
console.log('goodbye');
}, 3000);
}
a)如何使用回调修改上述功能,以便它可以先打印“ hello”,然后打印“再见”。 b)我想先打印“再见”,然后再打印“你好”,然后只想打印“完成”。如何通过回调也做到这一点。
答案 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)