let p1 = new Promise((resolve,reject)=>{
resolve();
});
let p2 = p1.then(()=>{
console.log("哈哈哈哈");
})
p2.then(()=>{
console.log(111111);
})
// 这里p1状态为 fulfilled
1. console.log(p1);
// 这里p2状态为 pending
1. console.log(p2);
// 而在定时器中
setTimeout(()=>{
// p1结果没有变化
console.log(p1);
// 而 p2的状态改为了 fulfilled
console.log(p2);
})
所以说在定时器中p2的结果发生了变化
// p1执行resolve,p1:fulfilled
let p1 = new Promise((resolve, reject) => {
resolve();
});
// 返回了一个新的promise,p2:pending
let p2 = p1.then(() => {
console.log("****3****", "哈哈哈哈");
});
// p2执行resolve,p2:fulfilled
p2.then(() => {
console.log("****4****", 111111);
});
// p1:fulfilled
console.log("****1****", p1);
// p2:pending
console.log("****2****", p2);
// 而在定时器中
setTimeout(() => {
// p1:fulfilled
console.log("****5****", p1);
// p2:fulfilled
console.log("****6****", p2);
});
与执行顺序有关,先执行Promise和setTimeout外的输出,再执行Promise的输出,最后执行setTimeout里的输出。
promise本身同步的,.then方法是异步的。new Promise是pending, Promise执行resolve会由pending->fulfilled,执行rejected会由pending->rejected,且三种状态不可逆