1.promise 将函数的状态暂停/凝固
解决回调地狱
<script> /* 我们使用promise的时候会将函数的状态暂停/凝固 new Promise 1.使用new 关键字实现promise 2.promise有两种状态resolve,reject 3.promise函数不会马上触发,要通过一个then函数去触发 4.then触发的是resolve(成功)的状态,catch触发失败的状态 resolve -->成功 reject -->失败 */ function go(){ return new Promise((resolve,reject)=>{ resolve(1); reject(2) }) } // go().then(res=>{ // console.log(res) // }).catch(err=>{ // console.log(err) // }) </script>
2.封装promise
<script> function http(){ return new Promise((resolve,reject)=>{ $.ajax({ url:"https://music.aityp.com/top/playlist/cat=华语", type:"get", success:res=>{ resolve(res) }, error:err=>{ reject(err) } }) }) } http().then(res=>{ console.log(res) }) </script>
3.网易云
//http-promise.jsvar baseUrl="https://music.aityp.com/"function http(url){ return new Promise((resolve,reject)=>{ $.ajax({ url:baseUrl+url, type:"get", dataType:"json", success:res=>{ resolve(res) }, error:err=>{ reject(err) } }) })}
//promise.html <script> http("top/playlist?cat=华语").then(res=>{ let id=res.playlists[0].id; return id }).then(res=>{ http(`playlist/detail?id=${res}`).then(res=>{ let id=res.playlist.trackIds[0].id; return id }).then(res=>{ http(`song/url?id=${res}`).then(res=>{ console.log(res) }) }) }) </script>