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);
        })