[TOC]

Promise是一种异步操作的解决方案,将写法复杂的传统的回调函数和监听事件的异步操作,用同步代码的形式表达出来。
避免了多级异步操作的回调函数嵌套。 解决异步问题
promise 会将函数的状态暂停(凝聚,冻结)
promise不会直接触发,它会通过(then,catch)才会触发
1.触发promise的resolve状态,可以then函数去触发
2.触发reject状态,通过catch函数去触发

1.promise状态

  • resolve — 处理成功的情况
  • reject — 处理失败的情况
  • pending等待,冻结

    1.触发promise的resolve状态,可以then函数去触发
    2.触发reject状态,通过catch函数去触发

    <script>         
    var p=new Promise((resolve,reject)=>{
    //    resolve(1);
      reject(2);
    })
    p.then(res=>{
      console.log(res);
    }).catch(err=>{
      console.log(err);
    })
    </script>
    

    await

    await 操作符用于等待一个 Promise 对象, 它只能在异步函数 async function 内部使用。

    promise,async,await 异步的终极解决方案

    var a = new Promise((resolve, reject) => {
       setTimeout(() => {
           resolve("http1")
       }, 2000)
    })
    var b = new Promise((resolve, reject) => {
       setTimeout(() => {
           resolve("http2")
       }, 1000)
    })
    /* 
    1.then
    2.await  代码就会卡顿,promise执行完毕之后才会执行后面的代码
    */
    async function go(){
       var res = await a;
       var sum =  await b;
       console.log(res);
       console.log(sum);
    
    }
    

    2.try: 可以将容易出错的代码(对缓存的操作如http请求,文件的上传/下载),

    允许测试代码块中的错误

    3.catch:捕获错误

    <script>
    // 可以将容易出错的代码(对缓存的操作如http请求,文件的上传/下载)
    try{
       alertt("http")
    }catch(err){    //捕获错误
       console.log(err)
    }
    console.log("hello world")
    </script>
    

    try …throw…catch

    <script>
    var arr =""
    // 可以将容易出错的代码(对缓存的操作如http请求,文件的上传/下载)
    try{
       // alertt("http")
    if(Array.isArray(arr)){ 
       console.log(arr.length)   //捕获错误
    
    }else{
       throw "必须传入一个数组"
    }
    }catch(err){
       console.log(err) 
    }
    
    // console.log("hello world")
    
    /* throw可以自定义一个错误 ,*/
    
    </script>
    

    .promise 封装jquery-ajax

    http.js部分

    function http(){
    return new Promise((resolve,reject)=>{
    $.ajax({
       url:"http://192.168.4.18:3000/top/playlist/?cat=华语",
       type:"get",
       success:res=>{
           resolve(res)
       },
       error:err=>{
           reject(err)
       }
    })
    })
    }
    

    html部分 ```javascript <!DOCTYPE html>

```