3.改变promise状态 和指定回调函数谁先谁后?
(1) 都有可能,正常情况下是先指定回调函数再改变状态,但是也可以先改变状态再指定回调函数
(2) 如何先改变 状态再指定回调?
在执行器中 直接调用resolve()/reject()
延迟更长时间才调用then()
(3)什么时候才能得到数据?
如果先指定回调,当状态发生改变时,回调函数就会调用,得到数据
如果先改变转态,那指定 回调时,回调函数就会调用,得到数据
.then是同步
里面调用 的resolve,reject都是异步函数,怎么验证?
在先改变状态 ,后指定回调函数的例子里 最后加入console.log("-----------------------");
先输出-------------------则resolve,reject是异步
//先指定回调函数 ,后改变状态(同时指定数据)
new Promise((resolve,reject)=>{
setTimeout(()=>{//后改变状态(同时指定数据),异步执行回调函数
reject(1)
},1000)
}).then(//先指定回调函数 ,保存当前指定的回调函数
value=>{},
reason=>{
console.log("reason",reason)
}
)
//先改变状态 ,后指定回调函数
new Promise((resolve,reject)=>{
//先改变状态(同时指定数据),
resolve(2)
}).then(//后指定回调函数 , 异步执行回调函数,看.then的时候是成功还是失败来决定执行哪个函数
value=>{console.log("value2",value)},
reason=>{
console.log("reason2",reason)
}
)
//验证resolve,reject都是异步操作
console.log("-----------------------");
const p=new Promise((resolve,reject)=>{
setTimeout(()=>{//先改变状态(同时指定数据)
reject(3)
},1000)
})
setTimeout(()=>{
p.then(//后指定回调函数
value=>{},
reason=>{
console.log("reason3",reason)
}
)
},1100)