promise和setTimeout执行顺序的问题

导读:本篇文章讲解 promise和setTimeout执行顺序的问题,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

promise分为三种状态
pending:初始状态;
resolve:代表成功;
reject:代表失败。
promise本身是同步
Promise对象表示未来某个将要发生的事件,但在创建Promise时,作为Promise参数传入的函数是同步执行的,但then方法中的回调函数执行则是异步的。|

宏任务:将 setTimeout、setlnterval放在宏任务中;
微任务:Promise放在微任务中。

执行的先后顺序:
1、首先执行栈里的任务;(就是同步任务)
2、执行栈清空后,检查微任务队列,将可执行的微任务全部执行;
3、取出宏任务队列中的第一项执行;
4、回到第二步再次检查。

在这里插入图片描述
如果i==99 那么执行resolve()

在p的 setTimeout中虽然又有一次p的resolve但是p的then的语句不会再执行第二个resolve了,因为状态不可逆。

Promise对象的then 方法返回一个新的Promise对象,因此可以通过链式调用then方法。then方法接收两个函数作为参数,第一个参数是Promise 执行成功时的回调,第二个参数是Promise执行失败时的回调。两个函数只会有一个被调用,函数的返回值将被用作创建then返回的Promise对象。这两个参数的返回值可以是以下三种情况中的一种:
·return:一个同步的值,或者undefined(当没有返回一个有效值时,默认返回undefined),then方法将返回一个resolve 状态的Promise对象,Promise对象的值就是这个返回值。
·return:另一个Promise,then 方法将根据这个Promise的状态和值创建一个新的Promise对象返回。
·throw:一个同步异常,then方法将返回一个rejected状态的Promise,值是该异常。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/64821.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!