回调地狱
<div id="app"></div><h2>列表数据</h2><p class="dp"></p><audio src="" controls></audio><script>/* 1.华语中的第一条数据 */var url = 'http://192.168.4.18:3000/top/playlist/?cat=华语'$.ajax({url,success:res=>{var {name,id} = res.playlists[0]$("#app").html(name)/* 2.列表页数据 */var listUrl = `http://192.168.4.18:3000/playlist/detail?id=${id}`$.ajax({url:listUrl,success:res=>{var {name,id} = res.playlist.tracks[0]$(".dp").html(name)/* 3.根据id获取音乐播放器的url连接 */var musicUrl = `http://192.168.4.18:3000/song/url?id=${id}`$.ajax({url:musicUrl,success:res=>{let src = res.data[0].url$("audio").attr("src",src)}})}})}})</script>
promise
Promise对象:代表了未来某个将要发生的事件(通常是一个异步操作)
好处:有了promise对象,可以将异步操作以同步的流程表达出来,避免了层层嵌套的回调函数(回调地狱)
1.promise原理
promise有两种状态 成功/失败resolve函数处理成功的情况reject函数处理失败的情况
const promise = new Promise((resolve, reject) => {resolve(2);reject(3);})promise.then(res => {console.log(res);}, err => {console.log(err);})
