【Promise】3道题轻松上手Promise执行顺序

1.Promise正常resolve 正常.then

const promise = new Promise((resolve,reject)=>{
 console.log(1);
 resolve('success')
 console.log(2);
})

promise.then(()=>{
  console.log(3);
})
console.log(4);

首先我们先创建了一个变量promise来接收promise对象

注意:在创建Promise的时候,回调函数里的代码是同步立即执行的。所以先输出1

紧接着碰到了resolve,这里将promise的状态改为了完成,并且后续可以使用.then方法接收reslove中的参数

输出2

这时遇到.then方法,我们将其加入微任务队列,不执行。

输出4

这时候作用域中已经没有宏任务了,我们检查微任务队列,输出3

结果:1243

2.Promise不resolve 正常.then

const promise = new Promise((resolve,reject)=>{
 console.log(1);
 console.log(2);
})

promise.then(()=>{
  console.log(3);
})
console.log(4);

同上 首先我们先创建了一个变量promise来接收promise对象

注意:在创建Promise的时候,回调函数里的代码是同步立即执行的。所以先输出1

紧接着碰到了resolve,这里将promise的状态改为了完成

输出2

这时遇到.then方法,犹豫我们并没有在promise中resolve或者rejecty,因此不执行。

输出4

结果:124

3.setTimeout+.then()

console.log('start');
setTimeout(()=>{
  console.log('time');
})
Promise.resolve(().then(()=>{
  console.log('resolve');
}))
console.log('end');

我们需要将当前代码的执行环境当成第一个宏任务

首先来到第一行 输出start是没有问题的

紧接着我们会遇到定时器 我们将其放入下一个宏任务队列(第二个宏任务) 暂不执行里面的代码

遇到了.resolve状态下的.then,此时我们需要将其看成一个整体 也就是说他这里就只是一个.then,我们将其加入第一个宏任务的微任务队列 暂不执行

输出end

现在开始检查第一个宏任务的微任务 发现有一个微任务 执行resolve

微任务检查完 开始执行第二个宏任务队列 输出定时器里面的time

结果:start end resolve time

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值