<center>Promise and setTimeout 到底谁快</center>

测试荔枝一:

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值