1 -定义

  1. Promise是一种异步操作的解决方案,将写法复杂的传统的回调函数和监听事件的异步操作,用同步代码的形式表达出来。
  2. 避免了多级异步操作的回调函数嵌套。
  3. 目的:为了解决异步任务而诞生,可以将一个异步的流程变为同步的
  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>

2- promise 的三种状态

  1. 1. pending 等待 冻结
  2. 2. fulfilled (resolved) 成功的状态 调用reslove函数,获取就是resolved状态
  3. 3. rejected (reject) 失败的状态 调用 reject函数,获取reject的状态
  1. var p = new Promise((resolve,reject)=>{
  2. resolve(100)
  3. reject(100)
  4. })
  5. console.log(p) // fulfilled状态

2-1 状态切换

  1. // pending -->resolved
  2. var p = new Promise((resolve,reject)=>{
  3. setTimeout(()=>{
  4. resolve(100)
  5. },1000)
  6. })
  7. console.log(p)
  8. setTimeout(()=>{
  9. console.log(p)
  10. },2000)

3- 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>