一道有意思并对你有帮助的Promise题
一道有意思的题
以下我的学习分析心路历程,以及我自己又多加了几道菜;希望对你有帮助
先上菜
new Promise((resolve, reject) => { console.log('promise1'); resolve(); }).then(() => { console.log('then11'); new Promise((resolve, reject) => { console.log('promise2'); resolve(); }).then(() => { console.log('then21'); }).then(() => { console.log('then23'); }); }).then(() => { console.log('then12'); });
分析第一道菜
- 第一次看到我做错了,答案是
promise1 then11 promise2 then21 then12 then23
- 我的疑惑就是
then12
为什么在then21
和then23
之间,很奇怪。说明什么呢?我对Promise
的内部实现还不了解,那只能去看源码了。在学习过程中,自己也尝试改变了几处,也贴上来吧,大家看看
看完后我的理解
先分析下面代码
new Promise((resolve, reject) => { console.log('promise1'); resolve(); })
- 第一步
console.log('promise1')
,这是第一个Promise
实例 - 第二步
resolve()
,他是一个异步,放入异步队列中,取名异步1 - 第三步
this.status
状态是pending
接着执行下面代码
.then(() => { console.log('then11'); new Promise((resolve, reject) => { console.log('promise2'); resolve(); }).then(() => { console.log('then21'); }).then(() => { console.log('then23'); }); })
- 因为状态是
pending
,将then方法回调函数加入执行队列(一个数组)等待执行(专用来放then方法的数组),该then
方法取名方法1
重点接着执行什么?
并不是执行.then(() => {console.log(then12)})
,要记住的是then
的参数方法执行时机是当前(属于自己的)promise状态改变才会执行,谁改变resolve或者rejectd的执行
,那么这里then的promise哪里来,就是上面的方法1
中来看他的return值
所以开始执行异步1(我都有取名的,看
相关推荐
nmgxzm00 2020-11-10
xixixi 2020-11-11
88254251 2020-11-01
MarukoMa 2020-09-02
88234852 2020-09-15
陈旭阳 2020-08-31
whynotgonow 2020-08-19
前端开发Kingcean 2020-07-30
whynotgonow 2020-07-29
bowean 2020-07-08
前端开发Kingcean 2020-07-08
88520191 2020-07-05
前端开发Kingcean 2020-06-27
88481456 2020-06-18
whynotgonow 2020-06-16
88520191 2020-06-13
88520191 2020-06-13
89500297 2020-06-13