一道有意思并对你有帮助的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(我都有取名的,看
相关推荐
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