1- 定义

  1. Promise是一种异步操作的解决方案,将写法复杂的传统的回调函数和监听事件的异步操作,用同步代码的形式表达出来。
  2. 避免了多级异步操作的回调函数嵌套。
  3. 目的:为了解决异步任务而诞生,可以将一个异步的流程变为同步的
<!--  promise 会将函数的状态暂停(凝聚,冻结)
      resolve  -- 处理成功的情况
      reject -- 处理失败的情况
      promise不会直接触发,它会通过(then,catch)才会触发
  -->
  <!-- 
    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>

2- promise 的三种状态

1. pending 等待 冻结
2. fulfilled (resolved) 成功的状态 调用reslove函数,获取就是resolved状态
3. rejected (reject)  失败的状态  调用 reject函数,获取reject的状态
var p = new Promise((resolve,reject)=>{
   resolve(100)
   reject(100)
})
console.log(p)   // fulfilled状态

2-1 状态切换

//  pending -->resolved
var p = new Promise((resolve,reject)=>{
  setTimeout(()=>{
    resolve(100)
  },1000)
})
console.log(p)
setTimeout(()=>{
  console.log(p)
},2000)

3- promise-ajax

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)
            }
        })
    })
}


<script>
      http("top/playlist/?cat=华语").then(res=>{
      let id = res.playlists[0].id
      return id
    }).then(res=>{
      let id = res
      http(`playlist/detail?id=${id}`).then(res=>{
        var {name,id} = res.playlist.tracks[0]
        console.log(id);
      })
    })
</script>