zoukankan      html  css  js  c++  java
  • ES6_Promise承诺解决异步

    <!DOCTYPE html>
    <html>
    <head>
    <title>Promise承诺解决异步</title>
    <script type="text/javascript">
    /*
    //Promise承诺解决异步
    //传统方式: 大部分用回调函数,事件
    ajax(url,()=>{
    //获取token
    ajax(url,()=>{
    //获取用户信息
    ajax(url,()=>{
    //得到浏览内容权限

    })
    })
    })

    */

    let a = 1;
    let promise = new Promise(function(resole,reject){
    if (a==10) {
    resole('成功的提示信息');
    }else{
    reject('错误的提示信息');
    }
    });
    // promise.then(res=>{
    // console.log(res);
    // },err=>{
    // console.log(err);
    // })
    // promise.catch(err=>{
    // console.log(err);
    // })

    //优化写法 去掉第二个参数,直接catch
    promise.then(res=>{
    console.log(res);
    }).catch(err=>{ //catch好像要慢许多,因为下面的resolve都执行完了,才执行到这里
    console.log("catch的err"+err);
    })

    /*
    =====================================================================================
    */
    /*
    let p1 = Promise.resolve('aaa');//将现有的东西,转成一个Promise对象,resolve状态,成功状态等价于下面
    p1.then(res=>{
    console.log('p1的resolve'+res);
    })

    //上面和下面的写法类似
    let p2 = new Promise(resolve=>{
    resolve('aaa');
    });
    p2.then(res=>{
    console.log('p2的resolve'+res);
    });


    let p1 = Promise.reject('aaa');
    let p2 = new Promise(resolve=>{
    reject('aaa');
    });
    p2.then(res=>{
    console.log('p2的resolve'+res);
    });
    //-------------------------------------------------------------------------
    //批量处理Promise对象
    let p1 = Promise.resolve('aaa');
    let p2 = Promise.resolve('bbb');
    let p3 = Promise.resolve('ccc');

    Promise.all([p1,p2,p3]).then(res=>{ //把promise打包,扔到一个数组里,打包完还是一个promise对象
    let [res1,res2,res3] = res; //必须确保,所有的promise对象,都是resolve状态,都是成功状态
    console.log(res1,res2,res3);
    })

    Promise.race([p1,p2,p3]).then(res=>{ //只要一个成功,就返回
    let [res1,res2,res3] = res;
    console.log(res1,res2,res3);
    })
    */
    //例子 模拟登陆
    let status=1;
    let userLogin = (resolve,reject)=>{
    setTimeout(()=>{
    if (status==1) {
    resolve({data:'某某人',msg:'这是一些提示信息',token:'xsadsadasfassa'});
    }else{
    reject('登陆失败鸟');
    }
    },1000);
    };
    let gerUserInfo = (resolve,reject)=>{
    setTimeout(()=>{
    if (status==1) {
    resolve({data:'获取用户信息成功',msg:'撒旦',token:'xsadsadasfassa'});
    }else{
    reject('获取用户数据失败');
    }
    },1000);
    };
    new Promise(userLogin).then(res=>{
    console.log(res.data+'登陆成功');
    return new Promise(gerUserInfo);//返回第二个方法,让下个then调用
    }).then(res=>{
    console.log(res);
    })


    //-------------------------------------------------------------------------
    //......//已经学会了 2018年8月2日19:45:03 笔记已补充完整//
    //-------------------------------------------------------------------------

    //暂时未学明白,暂时中止
    //大概知道这个的意思就是,网络请求时会存在异步请求,可以把请求顺序进行排序,能方便请求的顺序
    //解决的是异步请求的多层嵌套关系 如下:
    // ajax(url,()=>{
    // //获取token
    // ajax(url,()=>{
    // //获取用户信息
    // ajax(url,()=>{
    // //得到浏览内容权限
    // ajax(url,()=>{
    // //一些其他的异步操作
    // //...
    // })
    // })
    // })
    // })
    //2018年7月30日17:43:05
    //

    </script>
    </head>
    <body>

    </body>
    </html>

  • 相关阅读:
    Python 学习笔记(十三)Python函数(二)
    Python 学习笔记(十三)Python函数(一)
    Python 学习笔记(十二)Python文件和迭代(二)
    tb数据过多用省略号显示
    js,el表达式,<c:if>
    html元素标签时间格式化
    oracle链接报错shared memory realm does not exist
    mysql查找字段在哪个表中
    删除数据库重复数据
    excel使用poi操作。
  • 原文地址:https://www.cnblogs.com/bigfire/p/9518219.html
Copyright © 2011-2022 走看看