promise的基本使用
new promise((reslove,reject)=>{}) const fun = () =>{ return new Promise(()=>{ }) } fun().then
promise是一个构造函数,接受一个函数作为参数
函数里面接受两个参数resolve,reject
promise实例的两个属性
state:状态
result:结果
1、promise的状态
pending(准备,待解决,进行中)
fulfilled(已完成,成功)
reject(已拒绝,失败)
2、promise状态的改变
通过resolve和reject可以改变promise的状态
示例
var p = new Promise((resolve,reject)=>{
// 调用resolve()会使状态变成fulfilled成功状态
// 调用reject()会使状态变成rejected失败状态
// resolve()//fulfilled
reject()//rejected
})
console.log(p);
注:promise的状态改变是一次性的
3、promise的结果
示例
var p = new Promise((resolve,reject)=>{
// 调用resolve()传递参数会改变当前promise对象的结果,传递的参数即为promise当前的结果
//调用reject()传递参数会改变当前promise对象的结果,传递的参数即为promise当前的结果
resolve('成功的结果')//fulfilled,'成功的结果'
// reject('失败的结果')//rejected,'失败的结果'
})
console.log(p);
promise的方法
promise的所有方法
1、then()方法
then方法的使用
var p = new Promise((resolve,reject)=>{
// 调用resolve()传递参数会改变当前promise对象的结果,传递的参数即为promise当前的结果
//调用reject()传递参数会改变当前promise对象的结果,传递的参数即为promise当前的结果
// resolve('成功的结果')//fulfilled,'成功的结果'
reject('失败的结果')//rejected,'失败的结果'
})
const fun = () =>{
return new Promise(()=>{
})
}
// then一共有两个参数,第一个参数是promise状态为fulfilled成功时调用的函数,
// 第二个是promise状态为reject失败时调用的函数
p.then(()=>{
// promise状态为fulfilled成功时调用
console.log(111)//111
},()=>{
// 第二个是promise为reject
console.log(222)//222
})
fun().then()
console.log(p);
注:promise的then方法返回一个新的promise实例,状态是pending
注: 如果promise的状态不改变为pending(准备,待解决,进行中),则then方法不会执行
// 如果promise的状态不改变为pending(准备,待解决,进行中),则then方法不会执行
new Promise((resolve,reject)=>{
}).then(()=>{
console.log('成功');
},()=>{
console.log('失败');
})
注:在then方法中
// 如果promise的状态不改变为pending(准备,待解决,进行中),则then方法不会执行
new Promise((resolve,reject)=>{
resolve()//调用resolve方法会将这个promise改为fulfilled(已完成,成功),则下一个.then()会执行第一个函数并返回一个状态为fulfilled(已完成,成功)的promise,所以下下个.then方法也会执行第一个函数
}).then(()=>{
console.log('成功');
console.log(a);//因为没有a所以这个then会错误,所以下一个.then会打印出‘失败2’
},()=>{
console.log('失败');
}).then(()=>{
// 前面.then方法的promise的状态为pending,所以这个.then的方法的状态也不会执行依旧为pending状态,如果要改变这个.then的状态需要将上一个
// .then的状态改变,需要将promise的状态改成resolve或者为reject
console.log('成功2');
},()=>{
console.log('失败2');
}
)
2、catch()方法
catch什么时候会被调用?
当promise状态为reject失败的状态会被调用
当promise执行出现错误会被调用
注:.catch和then一样会返回一个新的状态为pending的promise
注:catch和then的第二个参数函数的不同是catch的参数可以进行错误提示
示例:
<script>
var p = new Promise((resolve,reject)=>{
// reject()//当promise状态为reject时会被执行
console.log(a);//当promise执行出现错误会被调用
})
// catch什么时候会被执行
// 1、当promise状态为reject时会被执行,和then的第二个参数函数的不同是,catch会进行错误提示
p.catch((reason)=>{
console.log('失败',reason);//reason参数是错误的信息
})
// console.log(a);//catch同样会返回一个新的状态为pending的promise
// console.log(p);//状态为pending
</script>