Promise
1.为什么需要promise?
promise是为了解决回调地域的问题
回调地域:在回调函数中嵌套回调
2.Promise的基本使用
Promise是一个构造函数,通过new关键字实例化对象
const p = new Promise((resolve,reject) => {})
1. promise实例有两个属性
- state:状态
- result:结果
2. promise的状态
- 第一种状态:pending(准备,待解决,进行中)
- 第二种状态:fulfilled(已完成,成功)
- 第三种状态:rejected(已拒绝,失败)
promise状态的改变
通过调用resolve()和reject()改变当前promise对象的状态,promise状态的改变是一次性的
const p = new Promise((resolve,reject) => {
resolve();//调用当前函数,是当前函数的状态改为fulfilled
})
console.log(p)
const p = new Promise((resolve,reject) => {
// resolve();//调用当前函数,使当前函数的状态改为fulfilled
reject();//调用当前函数,使当前函数的状态改为rejected
})
console.log(p)
3.promise的结果
const p = new Promise((resolve,reject) => {
resolve('成功的结果');//通过调用resolve,传递参数,改变当前promise对象的结果
// reject('失败的结果');
})
console.log(p)
promise的方法
1.then方法
// 参数:第一个是函数,第二个还是一个函数
// 返回值:是一个promise对象
p.then(()=>{
console.log('成功啦');
},()=>{
console.log("失败了")
})
console.log(p)
const p = new Promise((resolve,reject) => {
resolve('123');
// reject('456');
})
// 参数:第一个是函数,第二个还是一个函数
// 返回值:是一个promise对象
p.then((value)=>{
console.log('成功啦',value);//通过形参的形式获取promise的结果
},(err)=>{
console.log("失败了",err)
})
console.log(p)
then方法返回一个新的promise实例,状态是pending
// 如果promise的状态不改变,then的方法不会执行
new Promise((resolve,rej) => {
resolve('123');
}).then((value) =>{
console.log('成功',value)
// 在then方法中,通过return将返回的promise实例改为fulfilled状态
return 123
},(error) =>{
console.log('失败',error)
}).then((val) =>{
console.log('success',val)
},(err) =>{
console.log('error',err)
})
2.catch方法
catch中函数的参数一般在什么时候执行?
- 1.当promise的状态为rejected时候,被执行
- 2.当promise执行体中出现代码错误时候,被执行
const p = new Promise((resolve,reject) => {
// reject ()
console.log(a)
throw new Error('失败')
})
p.catch((reson) => {
console.log('出错啦',reson)
})
console.log(p)