Promise异步编程的一种解决方案。 承诺,许诺
promise是什么?
它是ES6原生提供的一个对象,此对象是一个构造函数,可以获取异步操作的消息。
promise就是一个容器,里面保存着未来才会结束的事件,(通常是异步操作的结果)
解决问题:异步编程的解决方案,可以将异步操作以同步操作的流程写出来,不用再层层嵌套。例如ajax,图片加载
promise对象有以下两个特点:
1>对象的状态不受外界影响
Promise代表一种异步操作,有三种状态:pending(进行中) fulfilled(已成功) rejected(已失败)
pending — > fulfilled
pending — > rejected
2>一旦状态改变,就不会再变
开始学习
语法:
Promise.all([promise1,promise2,promise3...]).then((res) => {}) 将多个promise包装成多个promise
Promise.prototype.then()
功能:为实例添加状态改变的回调函数
第一个函数:成功的函数 第二个函数:失败的函数
Promise.prototype.catch()
功能:发生错误时的回调函数
Promise.prototype.finally()
功能:不管promise最后的状态如何,都会执行
Promise.prototype.all()
功能:是把多个promise对象包装成一个promise对象
Promise.reslove()
功能:把一个现有的对象转成promise对象
Promise.reject()
功能:把一个现有的对象转成promise对象 它的状态是reject
实例
let a = 10;
let promise = new Promise(function(resolve,reject){
if(a==10){
resolve(a);
}else{
reject(a);
}
})
//promise.then(success,error)
promise.then(res =>{
console.log(res)
},error =>{
console.log(error)
})
promise.catch(err => {
console.log(err)
})
- 经常用的形式
new Promise().then(res =>{
console.log(res)
}).catch(err => {
console.log(err)
})
Promise.resolve():将现有的东西,转成一个promise对象,resolve状态,成功状态
等价于:
new promise(resolve => {
resolve('成功了')
})
Promise.reject():将现有的东西,转成一个promise对象,reject状态,失败状态
相当于:
new Promise((resolve,reject) => {
reject('失败了')
})
Promise.all([p1,p2,p3]):把promise打包,扔到一个数组里面,打包完还是一个promise对象
必须确保所有的promise对象,都是resolve状态,都是成功状态
Promise.race([p1,p2,p3]):只要有成功,就返回
- 用户登录成功 ----> 获取用户信息
let status = 1;
let userLogin = resolve => {
setTimeout(() => {
if (status == 1) {
resolve("登录成功")
} else {
reject("登录失败")
}
}, 1000)
}
let getUserInfo = (resolve, reject) => {
setTimeout(() => {
if (status == 1) {
resolve("获取信息成功")
} else {
reject("失败了")
}
}, 1000)
}
new Promise(userLogin).then(res => {
console.log(res);
return new Promise(getUserInfo)
}).then(res => {
console.log(res)
})