回调地狱

  1. <div id="app"></div>
  2. <h2>列表数据</h2>
  3. <p class="dp"></p>
  4. <audio src="" controls></audio>
  5. <script>
  6. /* 1.华语中的第一条数据 */
  7. var url = 'http://192.168.4.18:3000/top/playlist/?cat=华语'
  8. $.ajax({
  9. url,
  10. success:res=>{
  11. var {name,id} = res.playlists[0]
  12. $("#app").html(name)
  13. /* 2.列表页数据 */
  14. var listUrl = `http://192.168.4.18:3000/playlist/detail?id=${id}`
  15. $.ajax({
  16. url:listUrl,
  17. success:res=>{
  18. var {name,id} = res.playlist.tracks[0]
  19. $(".dp").html(name)
  20. /* 3.根据id获取音乐播放器的url连接 */
  21. var musicUrl = `http://192.168.4.18:3000/song/url?id=${id}`
  22. $.ajax({
  23. url:musicUrl,
  24. success:res=>{
  25. let src = res.data[0].url
  26. $("audio").attr("src",src)
  27. }
  28. })
  29. }
  30. })
  31. }
  32. })
  33. </script>

promise

Promise对象:代表了未来某个将要发生的事件(通常是一个异步操作)
好处:有了promise对象,可以将异步操作以同步的流程表达出来,避免了层层嵌套的回调函数(回调地狱)

1.promise原理

  1. promise有两种状态 成功/失败
  2. resolve函数处理成功的情况
  3. reject函数处理失败的情况
  1. const promise = new Promise((resolve, reject) => {
  2. resolve(2);
  3. reject(3);
  4. })
  5. promise.then(res => {
  6. console.log(res);
  7. }, err => {
  8. console.log(err);
  9. })