es6(三)

promise:

作用: 解决异步回调问题

传统方式,大部分用回调函数,事件触发等

ajax(url,{  //获取token
    ajax(url,()=>{  //获取用户信息
        ajax(url, ()=>{
            //获取用户相关新闻
        })
    })
})

promise语法:

第一种

{
  //语法
let promise = new Promise(function(resolve,reject){
//resolve  成功调用

//reject   失败调用

});
promise.then(res=>{

  },err=>{

});
promise.catch(err=>{

})
  }

第二种

    new Promise().then(res=>{

    }).catch(err=>{
        
    })
    new Promise().then(res=>{

    }).catch(err=>{
        
    })


Promise.resolve('aa') :  将现有的东西,转成一个promise对象, resolve状态,成功状态
    等价于:
    new Promise(resolve =>{
        resolve('aaa')
    });
Promise.reject('aaa'):   将现有的东西,转成一个promise对象,reject状态,失败状态
    等价于:
    new Promise((resolve, reject) =>{
        reject('aaa')
    });

Promise.all与race

Promise.all([p1,p2,p3]); promise打包,扔到一个数组里面,打包完还是一个promise对象; 必须确保,所有的promise对象,都是resolve状态,都是成功状态

Promise.race([p1, p2, p3]): 只要有一个成功,就返回


案例:用户登录之后,基于用户登录来获取用户的信息

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







猜你喜欢

转载自blog.csdn.net/alright_well/article/details/79813872
ES6