为什么这个简单的回调在setTimeout之前执行?



这个代码片段在'输出1'之前记录'输出2',这很酷,因为setTimeout.

const func1 = () => {
setTimeout(() => {
console.log('output 1');
}, 3000);
};
const func2 = () => {
console.log('output 2');
};
func1();
func2();

在这个代码片段中,我使用了一个回调,但是它给了我和上一个代码片段相同的结果,为什么func1不在func2之前执行?如何使func2func1之后执行

const func1 = () => {
setTimeout(() => {
console.log('output 1');
}, 3000);
};
const func2 = () => {
console.log('output 2');
};
const main = (a, b) => {
a();
b();
};
main(func1, func2);

为什么func1不在func2之前执行

  1. Func1设置超时运行
  2. <
  3. Func2日志/gh>
  4. 3秒后,您传递给setTimeout的回调函数被调用

如果您想让Func2在步骤3之后运行,那么您需要在传递给setTimeout的回调结束时调用它

JavaScript不会等待setTimeout完成后再执行下一个函数。无论何时javascript遇到setTimeOut,它都会用提供的超时时间存储函数,在本例中是3秒。在将它存储在调用堆栈中之后,它只是开始执行它下面的函数,因为第二个函数中没有任何内容,所以它立即被执行(显然在3秒之前)。这就是为什么你会在第一个函数之前看到第二个函数的对数。要执行第一个函数,然后执行第二个函数,可以使用承诺链接。例子:

return new Promise(function(resolve, reject) {
setTimeout(() => {
console.log('output 1');
resolve();
}, 3000);
}).then(function(result) {
console.log('output 2');
});

希望它会有所帮助。如果我说错了,请指正。

简单说明-

函数2不会等待函数1中启动的计时器完成。

func1();
func2();

两个函数同时执行时,函数1设置定时器,函数2退出。

功能1最终在3秒后退出。

第二个代码段做的差不多。

相关内容

  • 没有找到相关文章

最新更新