• Promise是一种异步操作的解决方案,将写法复杂的传统的回调函数和监听事件的异步操作,用同步代码的形式表达出来。


  • 避免了多级异步操作的回调函数嵌套。


  • promise本质:为了解决回调地狱问题


一、状态

  1. <!-- promise 会将函数的状态暂停(凝聚,冻结)
  2. resolve -- 处理成功的情况
  3. reject -- 处理失败的情况
  4. promise不会直接触发,它会通过(then,catch)才会触发
  5. -->
  6. <!--
  7. 1.触发promiseresolve状态,可以then函数去触发
  8. 2.触发reject状态,通过catch函数去触发
  9. -->
  10. <script>
  11. var p = new Promise((resolve,reject)=>{
  12. //resolve(1)
  13. reject(2)
  14. })
  15. p.then(res=>{
  16. console.log(res);
  17. }).catch(err=>{
  18. console.log(err);
  19. })
  20. </script>

二、例子 — Promise-Ajax

  1. function http() {
  2. return new Promise((resolve,reject)=>{
  3. $.ajax({
  4. url:"http://192.168.4.18:3000/top/playlist/?cat=华语",
  5. type:"get",
  6. success:res=>{
  7. resolve(res)
  8. },
  9. error:err=>{
  10. reject(err)
  11. }
  12. })
  13. })
  14. }
  15. <script>
  16. http("top/playlist/?cat=华语").then(res=>{
  17. let id = res.playlists[0].id
  18. return id
  19. }).then(res=>{
  20. let id = res
  21. http(`playlist/detail?id=${id}`).then(res=>{
  22. var {name,id} = res.playlist.tracks[0]
  23. console.log(id);
  24. })
  25. })
  26. </script>