这个代码片段在'输出1'之前记录'输出2',这很酷,因为setTimeout
.
const func1 = () => {
setTimeout(() => {
console.log('output 1');
}, 3000);
};
const func2 = () => {
console.log('output 2');
};
func1();
func2();
在这个代码片段中,我使用了一个回调,但是它给了我和上一个代码片段相同的结果,为什么func1
不在func2
之前执行?如何使func2
在func1
之后执行
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之前执行
。
- Func1设置超时运行 <
- Func2日志/gh>
- 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秒后退出。
第二个代码段做的差不多。