美文网首页
Promise and setTimeout 到底谁快

Promise and setTimeout 到底谁快

作者: 泉泉泉泉泉泉 | 来源:发表于2019-06-21 16:04 被阅读0次

    昨天是个紧张但是美好的一天,学到了很多东西,也刺激了我的学习热情。。。
    今天是个紧张但是美好的一天,我在这里写下了这篇博客。。。
    我们今天讨论一下,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

    相关文章

      网友评论

          本文标题:Promise and setTimeout 到底谁快

          本文链接:https://www.haomeiwen.com/subject/igtuqctx.html