美文网首页
用于封装Axios的Promise原理

用于封装Axios的Promise原理

作者: 浅谈码生活 | 来源:发表于2020-11-05 16:29 被阅读0次

Promise:相当于一个容器,保存者未来才会结束的事件及将要返回的结果;
Promise特点:
1.)对象的状态不受外界影响,处理异步操作共包含三个状态(Pending/进行中,Resolved/成功,Reject/失败);
2.)一旦状态改变,就不会在变,任何时候都可以得到这个结果
简单案例:

     let pro = new Promise(function(resolved,rejected){
             let res ={
                 code:200,
                 data:{
                    name:'wangwu'
                 },
                 err:'失败'
             }
             setTimeout(() => {
                 if(res.code === 201){
                     resolved(res.data);
                 }else{
                    rejected(res.err);
                 }
             }, 1000);
         })
         pro.then((val)=>{
             console.log(val);
         },(err)=>{
             console.log(err);
         });

封装案例:

       function timeOut(ms) {
            return new Promise((resolved, rejected) => {
                setTimeout(() => {
                    resolved('hello promise');
                }, ms);
            });
        }
        timeOut(2000).then((val) => {
            console.log(val);
        }).catch(err => {
            console.log(err);
        });
        console.log("ss");

All方法:(异步并行),加载素材时可以使用

        let promise1 = new Promise((resolved, rejected) => { });
        let promise2 = new Promise((resolved, rejected) => { });
        let promise3 = new Promise((resolved, rejected) => { });
        let promise4 = Promise.all([promise1, promise2, promise3]); //异步并发执行,并返回一个Promise
        //所有并发执行成功后继续操作
        promise4.then((val) => {

        }).catch((err) => {

        });

race方法:将执行动作Promise和超时动作Promise放到数组中,超时后将执行超时动作

function requestImage(imgSrc) {
            return new Promise((resolved, rejected) => {
                const img = new Image();
                img.src = imgSrc;
                img.onload = function () {   
                    resolved(img);
                } 
            });
        }
        function timeOut() {
            return new Promise((resolved, rejected) => {
                setTimeout(function () {
                    rejected("图片请求失败");
                }, 1000);
            });
        }
Promise.race([requestImage('https://ss0.bdstatic.com/94oJfD_bAAcT8t7mm9GUKT-xh_/timg?image&quality=100&size=b4000_4000&sec=1604562391&di=b9f3808e12abf31f184609414aa6d94c&src=http://a0.att.hudong.com/56/12/01300000164151121576126282411.jpg'), timeOut()]).then((data) => {
            document.body.appendChild(data);
        }).catch((err) => {
            console.log(err);
        }); 

相关文章

网友评论

      本文标题:用于封装Axios的Promise原理

      本文链接:https://www.haomeiwen.com/subject/mwcavktx.html