定义:
JS内置的构造函数,用来实例化,创建一个promise对象,promise实例对象提供一些方法
方法:
then() catch() finally()
应用场景:
一般用来解决异步回调,每次的状态,只能变化一次
let p = new Promise(function(resolve,reject){
//该位置一般写异步的代码
//根据异步代码的执行条件合理的去使用
resolve 和 reject
})
Promise共3个状态
一:pending:
持续/等待
二:fulfilled:
表示Promise成功状态
三:rejected:
表示Promise失败状态
let p = new Promise(function(resolve,reject){
resolve() //回调函数,只要调用该resolve()函数,Promise的状态由pending变成fulfilled状态
reject() //回调函数,只要调用该reject()函数,Promise的状态由pending变成rejected状态
})
console.log(p);
//当调用resolve()触发了promise实例对象p上的.then(()=>{})方法中的函数
//当调用reject()触发了promise实例对象上的catch(()=>{})方法中的函数
let p1 = new Promise(function(resolve , reject){
let time = Math.random()*2000+1000 //[1000,3000)
setTimeout(()=>{
if(time<2000){
console.log('请求成功');
resolve('成功')
}else{
console.log('请求失败');
reject('失败')
}
},time)
})
console.log(p1); //Promise {<pending>}:持续/等待
//示例一
p1.then((res)=>{
console.log(res);
})
p1.catch((err)=>{
console.log(err); //会出现报错
})
//在Promise中调用resolve()执行then()中方法
//在Promise中调用reject()执行catch()中方法
//示例二
//promise实例对象支持链式调用实例上的方法
p1.then((res)=>{
console.log(res);
}).catch((err)=>{
console.log(err); //不会出现报错
})
Promise解决回调地狱问题