JavaScript中promise和setTimeout执行顺序是什么

发布时间:2020-12-03 13:24:55 作者:小新
来源:亿速云 阅读:179

小编给大家分享一下JavaScript中promise和setTimeout执行顺序是什么,希望大家阅读完这篇文章后大所收获,下面让我们一起去探讨吧!

promise为es6引进的语言标准,为异步编程的一种解决方案;

阅读此文的前提是了解浏览器event loop的机制,还有promise的基本用法和特性,比如他自执行特性、状态不可逆特性等

抛出问题

且看下面代码和问题

setTimeout(function(){console.log(1)},0);
new Promise(function(resolve){
    console.log(2)
    for( var i=0 ; i<10000 ; i++ ){
        i==9999 && resolve()
    }
    console.log(3)
}).then(function(){
    console.log(4)
});
console.log(5);
// 这的问题是,为什么答案是 2 3 5 4 1
// 而不是 2 3 5 1 4

既然promise.then和setTimeout都是异步的,那么在事件循环队列中  promise.then的事件应该排在setTimeout后面,那为什么promise.then却在setTimeout前面被打印了出来?

重要概念

event loop 的概念

我的理解

我们来捋一遍代码的执行过程,

所有的代码都写在script标签中,所以读取所有代码是第一个宏任务,我们开始执行第一个宏任务。

我们首先遇到setTimeout,他是第二个宏任务,将它扔进宏任务事件队列里先排队。

下来我们遇到promise,promise执行器里的代码会被同步调用,所以我们依次打印出2和3。

下来遇到promise的回调,他是一个微任务,将它扔进微任务事件对列中。

下来我们接着打印出5,然后执行微任务并且打印出4.

我们第一个宏任务执行完毕,执行下一个宏任务,打印出1,到此,所有任务都执行完毕。

所以我们最后的结果为2 3 5 4 1。

看完了这篇文章,相信你对JavaScript中promise和setTimeout执行顺序是什么有了一定的了解,想了解更多相关知识,欢迎关注亿速云行业资讯频道,感谢各位的阅读!

推荐阅读:
  1. JavaScript中Promise.all和Promise.race方法是什么
  2. 一篇文章帮你了解promise与setTimeout的执行顺序

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

javascript promise settimeout

上一篇:es6中的Proxy是什么

下一篇:Angular框架的优势有哪些

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》