美文网首页
同步与异步

同步与异步

作者: WhiteStruggle | 来源:发表于2020-08-21 07:52 被阅读0次

    异步:同时进行多个操作,用户体验好,但代码混乱

    //麻烦,降低代码质量
    
    ajax("",function data1(){
    
        ajax("",function data2(){
        
            ajax("",function data3(){
            
            },function(err){
            
            })
        },function(err){
        
        })
    },function(err){
    
    })
    

    同步:一次只能进行一个操作,用户体验不好,但是代码清晰

    let data1 = ajax("")
    let data2 = ajax("")
    let data3 = ajax("")
    

    Promise

    Promise封装

    <!-- 1.txt -->
    {"a":"15","b":"58"}
    
    let data = new Promise(function(resolve,reject){
        //异步 ·····
        //resolve  —— 成功
        //resolve —— 失败
        $.ajax({
            url:"1.txt",
            dataType:'json',
            success(res){
              resolve(res);
            },
            error(err){
              reject(err);
            }
         })
    })
    

    引入 then

    data.then( function(arr){
            console.log(arr) //{a: "15", b: "58"}
        } , function(err){
            console.log(err);
        } );
    

    jquery 中的 $.ajax

    <!-- 1.txt -->
    {"a":"15","b":"58"}
    
        <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.5.1/jquery.js"></script>
        <script>
          let result = $.ajax({
            url:"1.txt",
            dataType:'json'
          }).then(res=>{
            console.log(res);//{"a":"15","b":"58"}
          },err=>{
            console.log(err);
          })
          console.log(result);//jQuery的$.ajax,返回一个promise对象
        </script>
    

    Promise.all

    格式:

    Promise.all([
        ····
    ]).then( 
        function(res){
            // 成功时执行 
        },function(err){
            //失败时执行
    })
    

    当执行多条ajax数据,成功获取的数据会保存在res数组中,可以使用解构赋值将数据分离

    <!-- 1.txt -->
    {"a":"15","b":"58"}
    
    <!-- 2.txt -->
    [1,5,96]
    
        <script>
          Promise.all([
            $.ajax({url:"1.txt",dataType:'json'}),
            $.ajax({url:"2.txt",dataType:'json'})
          ]).then(res=>{
            console.log(res);//(2)[{…}, Array(3)]
          },err=>{
            console.log(err);
          })
        </script>
    

    使用解构赋值,将获取的数据进行分割赋值

          Promise.all([
            $.ajax({url:"1.txt",dataType:'json'}),
            $.ajax({url:"2.txt",dataType:'json'})
          ]).then(([data1,data2])=>{
            console.log(data1);//{a: "15", b: "58"}
            console.log(data2);//(3)[1, 5, 96]
          },err=>{
            console.log(err);
          })
    

    async/await

    异步的操作,同步的写法

    使用:

    async function show(){
      xxxx;
      xxxx;
      let data = await $.ajax(); 
      xxx;
    }
    show()
    

    普通函数 —— 一直执行,直到结束

    async函数 —— 可以暂停执行

    async函数 以await为切割线,将函数分割开来,达到暂停函数的效果

    捕获异常使用try catch

    try{
        
    }catch(e){
        
    }
    

    相关文章

      网友评论

          本文标题:同步与异步

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