昨天是个紧张但是美好的一天,学到了很多东西,也刺激了我的学习热情。。。
今天是个紧张但是美好的一天,我在这里写下了这篇博客。。。
我们今天讨论一下,promise和settimeout到底谁执行的速度快?
测试荔枝一:(先在脑袋里想想,在看答案哦)
setTimeout(() => {
console.log(1)
});
const a = new Promise((resolve,reject)=>{
console.log(2);
resolve(3)
})
setTimeout(() => {
console.log(4)
});
const b = new Promise((resolve,reject)=>{
console.log(5)
resolve(6)
})
b.then(value=>console.log(value))
a.then(value=>console.log(value))
答案:
2
5
6
3
1
4
测试荔枝二:
setTimeout(function(){
console.log('定时器开始啦')
});
new Promise(function(resolve){
console.log('马上执行for循环啦');
for(var i = 0; i < 10000; i++){
i == 99 && resolve();
}
}).then(function(){
console.log('执行then函数啦')
});
console.log('代码执行结束');
答案:
马上执行for循环啦
代码执行结束
执行then函数啦
定时器开始啦
测试荔枝三:
console.log('1');
setTimeout(function() {
console.log('2');
process.nextTick(function() {
console.log('3');
})
new Promise(function(resolve) {
console.log('4');
resolve();
}).then(function() {
console.log('5')
})
})
process.nextTick(function() {
console.log('6');
})
new Promise(function(resolve) {
console.log('7');
resolve();
}).then(function() {
console.log('8')
})
setTimeout(function() {
console.log('9');
process.nextTick(function() {
console.log('10');
})
new Promise(function(resolve) {
console.log('11');
resolve();
}).then(function() {
console.log('12')
})
})
答案:
1
7
6
8
2
4
9
11
3
10
5
12
其实从答案中不难发现几个规律,
- promise和process.nextTick在程序中是先于settimtout执行的;
- 在promise和process.nextTick里面的console语句的执行速度是三个中最快,它与promise和process.nextTick执行的顺序无关,只与promise和process.nextTick声明的顺序有关;
好了,以上的结果也只是表象,想知道具体内部实现原理我们还是需要对JavaScript的同步任务和异步任务进行深入了解了。
关于这点有一个很好的博客推荐大家:https://juejin.im/post/59e85eebf265da430d571f89
网友评论