promise:是异步编程的一种解决方案,对象的状态不受外界影响。Promise对象代表 一个一部操作
语法:
let app=200;
let p1=new promise(function(resolve,reject){ //这里function函数中的两个参数是两个状态条件下才可执行,已完成状态执行第一个参数的回调函数。已失败状态执行第二个回调函数。
if(app==200){ //这里的if为判断状态。
resolve("成功") //resolve(此处可以传入需要调用的函数)
}else{
reject("失败") //reject(此处可以传入需要调用的函数)
}
})
有三种状态:
pending(进行中)、fulfilled(已成功)和rejected(已失败)
两种变化:
pending(进行中)---->fulfilled(已成功)
pending(进行中)---->rejected(已失败)
一旦状态发生改变,就不会在变,任何时候都可以得到这个结果,
避免层层嵌套的回调函数。此外,promise对象提供统一的接口,是的控制一部操作更加容易。
缺点:
1、无法取消promise,一旦新建他就会立即执行,无法中午取消。
2、如果不设置回调函数,promise 内部抛出的错误,不会反应到外部。
3、当处于pending状态时,无法得知目前进展到哪一个阶段(刚刚开始还是即将完成)。
原型上方法:
1、then()
语法:
p1.then(
res=>{ //已完成状态执行res回调函数,
console.log("helloy")
},
err=>{ //已失败状态执行err回调函数
console.log("No!!!")
}
)
2、catch()
语法:
p1.then(
res=>{ //已完成状态执行res回调函数,
console.log("helloy")
},
err=>{ //已失败状态执行err回调函数
console.log("No!!!")
}
).catch(err=>{ //断网的时候会进入catch中。catch为处理报错
console.log("No!!!",err)
})
3、finally()
语法:
p1.then(
res=>{ //已完成状态执行res回调函数,
console.log("helloy")
},
err=>{ //已失败状态执行err回调函数
console.log("No!!!")
}
).catch(err=>{ //断网的时候会进入catch中。
console.log("No!!!",err)
}).finally(param=>{ //兜底操作--无论代码执行到何处报错,最后都将回到finally中
console.log("无论代码执行到何处报错,最后都将回到finally中")
})
静态方法:
1、reject
2、resolve
语法:
构造对象.方法() //即可使用。
reject和catch的区别:
reject是用来抛出异常,catch是用来处理异常
reject是promise构造函数的方法,而catch是promise 实例的方法
reject后的东西,一定会进入 then 中的第二个回调,如果then中没有写第二个回调函数,则进入catch