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.js
var 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>