嵌套的setTimeout在js中无法正常工作



我有两个函数:

function one(callback) {
setTimeout(function () {
console.log('one');
callback(); 
}, 3000);
}
function two(callback) {
setTimeout(function () {
console.log('two');
callback();
}, 2000);
}

当我调用这样的函数时:

one(two(()=> console.log('Done!')))

情况如下:

two
Done!
one
/Users/shahryarhaghighifard/Downloads/test/callback.js:68
callback(); 
^
TypeError: callback is not a function

我看到,当函数"one"正在等待超时时,第二个函数正在运行。但是怎么做呢?我要到3秒钟后才能打电话。你知道怎么做吗?我想这样输出:

one
two 
done

如果你能解释一下这里发生了什么,我会很高兴的。

您正在调用第二个函数,并返回它返回给第一个函数的内容。由于它不返回任何内容,您将其设置为未定义。

分解代码,你可以看到发生了什么

function one(callback) {
setTimeout(function () {
console.log('one');
callback(); 
}, 3000);
}
function two(callback) {
setTimeout(function () {
console.log('two');
callback();
}, 2000);
}

var secondFunction = two(()=> console.log('Done!'));
console.log('secondFunction', secondFunction)
one(() => secondFunction);

应该如何

function one(callback) {
setTimeout(function () {
console.log('one');
callback(); 
}, 3000);
}
function two(callback) {
setTimeout(function () {
console.log('two');
callback();
}, 2000);
}
one(() => two(()=> console.log('Done!')))

相关内容

  • 没有找到相关文章

最新更新