Promise
- 作用:解决异步回调的问题,Promise是一个对象
- Promise对象有三种状态:pendding(正在请求),rejected(失败),resolved(成功)
语法:
let promise = new Promise(function(resolve,reject){
//resolve 调用成功
//reject 调用失败
});
promise.then((res) => {//then中有两个参数,res对应resolve的回调,err对应reject的回调
},(err) => {
})
promise.catch((err) => {
})
- 简洁的写法:
new Promise().then((res) => {
}).catch((err) => {
})
//一般then只处理成功的,catch用来处理错误的,并捕获错误信息
只有promise内部状态发生变化then才会执行
示例:
let promise = new Promise(function(resolve,reject){
console.log('1');
});
promise.then((res) => {
console.log('2');
})
//只打印出了1
Promise.resolve()
作用:将现有的东西转换成一个Promise对象,并且是resolved状态
Promise.resolve('aa');
//等价于
new Promise(resolve => {
resolve('aa');
});
Promise.reject()
作用:用法与resolve一样,状态为rejected状态
Promise.all([Promise1],[Promise2],…)
作用:将任意个promise对象打包放在一个数组里面,只有这些promise对象状态都为为resolved状态,通过Promise.all()生成的对象的状态才为resolved状态,否则为rejected状态
Promise.race([Promise1],[Promise2],…)
作用:通过Promise.race()生成的对象的状态是,数组中先执行的那个Promise对象的状态
小示例:
let status = 1;
let userLogin = (resolve, reject) => {
setTimeout(() => {
if (status == 1) {
resolve({ data: '登录成功', msg: 'xxx', token: 'xxsadfsadfas' });
} else {
reject('失败了');
}
}, 2000);
};
let getUserInfo = (resolve, reject) => {
setTimeout(() => {
if (status == 1) {
resolve({ data: '获取用户信息成功', msg: 'asdfasdf', token: 'xxsadfsadfas' });
} else {
reject('失败了');
}
}, 1000);
}
new Promise(userLogin).then(res => {
console.log('用户登录成功');
return new Promise(getUserInfo);
}).then(res => {
console.log('获取用户信息成功');
console.log(res);
})