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

nested setTimeout not working properly in 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

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

您正在调用第二个函数并将它 returns 的内容返回给第一个函数。因为它 returns 什么都没有,所以您将其设置为未定义。

拆开代码,看看是怎么回事

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!')))