Promise
作用:解决异步回调问题
传统方式:大部分用回调函数,事件
语法:
let a = 10;
let promise = new Promise(function(resolve,reject){
//resolve 成功时调用
//reject 失败时调用
if(a == 10){
resolve('成功')
}else{
reject('失败')
}
})
// promise.then(success,fail)
promise.then(res =>{
console.log(res)
},rej =>{
console.log(rej)
})
//成功
简洁用法:可以捕获错误(catch)
new Promise().then().catch(err => {})
** Promise.resolve(‘aaa’) : 将现有的东西,转成一个promise对象,resolve状态(成功状态)**
等价于:
new Promise(resolve =>{
resolve('aaa');
})
** Promise.reject(‘bbb’) : 将现有的东西,转成一个promise对象,reject状态(失败状态)**
等价于:
new Promise(reject =>{
reject('aaa');
})
** Promise.all(p1,p2,p3…) : 将promise打包,扔到一个数组里,打包完还是一个promise对象**
注意:必须确保p1,p2,p3等promise对象都是resolve状态
当 p1, p2, p3 状态都 Resolved 的时候,p 的状态才会 Resolved;只要有一个实例 Rejected ,此时第一个被 Rejected 的实例的返回值就会传递给 P 的回调函数。
应用场景:假设有一个接口,需要其它两个接口的数据作为参数,此时就要等那两个接口完成后才能执行请求
let p1 = Promise.resolve('aaa');
let p2 = Promise.resolve('bbb');
let p3 = Promise.resolve('ccc');
let p = Promise.all([p1,p2,p3]).then(res => {
console.log(res);//Array(3) ["aaa", "bbb", "ccc"]
})
** Promise.received(p1,p2,p3…) : 将promise打包,扔到一个数组里,打包完还是一个promise对象**
和Promise.all 类似,区别是 Promise.race() 只要监听到其中某一个实例改变状态,它的状态就跟着改变,并将那个改变状态实例的返回值传递给回调函数。
应用场景: 可以通过多个异步任务来进行容错处理,多个接口返回同样的数据,只要有一个接口生效返回数据即可。