promise习题

本文探讨Promise的异步特性,强调同步优先,异步靠边的原则。解析setTimeout和then的异步行为,详细解释了Promise.resolve()的执行顺序高于resolve()的原因,并指出Promise的状态一旦确定无法改变。通过实例分析,揭示了Promise构造函数中resolve或reject的执行原理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.

setTimeout(()=>{
	console.log('setTimeout')
})
let p1 = new Promise((resolve) => {
	console.log('Promise1')
	resolve('Promise2')
})
p1.then((res) => {
	console.log(res)
})
console.log(1)

同步优先,异步靠边

setTimeout 和 then 方法都是异步 先不看

resolve('Promise2')  的函数是

.then((res) => {
    console.log(res)
})

所以,是 Promise1 1 Promise2 setTimeout

.then((res) => {
    console.log(res)
})                                                     里的 res 是形参,实参是  Promise2

2.

new Promise(resolve => {
	console.log(1);
	resolve(3);
	Promise.resolve().then(()=>console.log(4))
}).then(num => {
	console.log(num)
})
console.log(2)

 顺序:1,2,4,3  不是 1,2,3,4

输出1 然后就是 2

通俗地说,Promise 函数,走一步,就跳出来 走后面  后面走完,再回来 Promise 内部,执行 resolve 和 then

重点说 3,4 的顺序:

当Promise直接resolve的时候,表示着在当前这一轮执行,这里就可以看作成一个同步的事件

Promise.resolve().then(()=>console.log(4))   的优先级比 resolve(3) 高

3.此题及以后  不是考顺序  而是原理

const promise = new Promise((resolve, reject) => {
  resolve('success1')
  reject('error')
  resolve('success2')
})
 
promise
  .then((res) => {
    console.log('then: ', res)
  })
  .catch((err) => {
    console.log('catch: ', err)
  })

结果:then: success1

解释:构造函数中的 resolve 或 reject 只有第一次执行有效,多次调用没有任何作用,呼应代码二结论:promise 状态一旦改变则不能再变。

 

解释:promise 的 .then 或者 .catch 可以被调用多次,但这里 Promise 构造函数只执行一次。或者说 promise 内部状态一经改变,并且有了一个值,那么后续每次调用 .then 或者 .catch 都会直接拿到该值。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值