学习笔记--promise的理解
Promise的理解
当前事件循环得不的结果,但未来的事件循环会得到你想要的结果
Promise的三种状态
Promise是一个状态机,一共拥有三种状态(padding,resolved/fulfilled,rejected) padding可转化为resolved和rejected中的其中一种,即结束 resolved和rejected不能互相转化
let promise = new Promise((resolve, reject) => {
setTimeout(() => {
resolve(1);
// reject(new Error(2));
}, 500);
});
console.log(promise) // 此时的状态是padding
setTimeout(() => {
console.log(promise); // 此时的状态是resolved/fulfilled,
}, 800)
(function(){
let promise = new Promise((resolve, reject) => {
setTimeout(() => {
resolve(1)
}, 500);
setTimeout(()=>{
console.log('我想改变下状态')
reject(new Error(2));
},600)
});
console.log(promise) // 此时的状态是padding
setTimeout(() => {
console.log(promise); // 此时的状态是resolved/fulfilled 并未发生改变
}, 800)
})()
then是Promiss转化为resolved的输出 catch则是Promiss转化为rejected的输出
(function(){
new Promise((resolve, reject) => {
setTimeout(() => {
resolve(1)
// reject(new Error(2))
}, 1000);
}).then(res => {
console.log(`1000毫秒之后输出的resolved的值是:${res}`)
}).catch(rej =>{
console.log(`1000毫秒之后输出的rejected的值是:${rej}`)
});
})()
****注意 ****resolved状态的Promise会回调第一个.then() ****rejected状态的Promise会回调第一个.catch(), ****rejected状态的Promise没有接一个.catch会造成浏览器和Node环境的全局报错。
promise.then( )和promise.catch( )返回的还是Promise对象,其结果状态由回调函数的执行结果决定
- 如果执行结果是throw 返回的则是Promise的状态则是rejected
- 如果执行结果是return 返回的则是Promise的状态则是resolved
- 如果执行结果return Promise对象 返回的状态则会和该结果的Promiss的返回结果状态一致
Promise.all(Array)
- Promise.all的then(所有Promise对象数组都为resolved)执行
- Promise.all的catch(所有Promise对象数组中出现为rejected)执行,并不能知晓那个Promise知晓