作用:就是解决异步回调问题的
let promise = new Promise(function(resolve, reject){
})
promise.then(res => console.log(res), err => console.log(err))
promise.catch(err => console.log(err))
一般不用then的第二个参数,直接用catch
then/catch返回的都是promise
let p1= Promise.resovle('aa');//将现有的东西转成一个promise对象,resolve状态的
p1.then(res => console.log(res)); //res=='aaa'
等价于
let p1 = new Promise(resolve => resolve('aaa'));
p1.then(res => console.log(res)); //res=='aaa'
let p2 = Promise.reject('aa');//将现有的东西转成一个promise对象,reject状态的
then中回调函数,如果返回的是非promise对象,产生的promise对象的状态为resolved,结果值为返回值;如果返回的是promise对象,状态与返回的promise对象一致。
Promise.all([p1, p2, p3]);把promise打包,扔到一个数组里,打包完还是promise对象
必须确保所有的promise对象都是resolve状态,而失败的时候则返回最先被reject失败状态的值
Promise.race([R1, R2, R3]);哪个结果获得的快,就返回那个结果,不管结果本身是成功状态还是失败状态。
demo模拟:
<script>
let status = 1;
let userLogin = (resolve, reject) =>{
setTimeout{() => {
if(status === 1){
resolve({data:'xxx', msg:'登录成功', token:'dfdgadg'});
}else{
reject('失败了');
}
}, 2000};
};
let getUserInfo = (resolve, reject) => {
setTimeout{() => {
if(status === 1){
resolve({data:'xxx', msg:'获取用户信息成功', token:'dfdgadg'});
}else{
reject('失败了');
}
}, 2000};
};
new Promise(userLogin).then(res => {
console.log(res.msg);
return new Promise(getUserInfo);
}).then(res => {
console.log(res.msg);
})
<script>