1. Promise是一种异步操作的解决方案,将写法复杂的传统的回调函数和监听事件的异步操作,用同步代码的形式表达出来。
  2. 避免了多级异步操作的回调函数嵌套。
  3. promise本质:为了解决回调地狱问题
  4. <!-- promise 会将函数的状态暂停(凝聚,冻结)
  5. resolve -- 处理成功的情况
  6. reject -- 处理失败的情况
  7. promise不会直接触发,它会通过(then,catch)才会触发
  8. -->
  9. <!--
  10. 1.触发promiseresolve状态,可以then函数去触发
  11. 2.触发reject状态,通过catch函数去触发
  12. -->
  13. <script>
  14. var p = new Promise((resolve,reject)=>{
  15. //resolve(1)
  16. reject(2)
  17. })
  18. p.then(res=>{
  19. console.log(res);
  20. }).catch(err=>{
  21. console.log(err);
  22. })
  23. </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. }
  1. <script>
  2. http("top/playlist/?cat=华语").then(res=>{
  3. let id=res.playlists[0].id
  4. console.log(id)
  5. return id;
  6. }).then(res=>{
  7. let id=res
  8. http(`playlist/detail?id=${id}`).then(res=>{
  9. var {name,id}=res.playlist.tracks[0]
  10. console.log(id)
  11. })
  12. })
  13. </script>

promise和定时器执行顺序 异步

promise优先于定时器

  1. console.log("3");
  2. setTimeout(() => {
  3. console.log(2)
  4. }, 1000);
  5. Promise.resolve().then(()=>{
  6. console.log(1)
  7. }) //3 1 2

await 阻塞线程 遇到await会从函数中出,去执行其它同步代码

  1. async function show(){
  2. console.log(1);
  3. var res=await 100;
  4. console.log(res)
  5. }
  6. show();
  7. console.log(2);
  8. setTimeout(() => {
  9. console.log(3)
  10. }, 1000);
  11. // 1 2 100 3
  1. await的作用1.获取promise结果
  2. 2.阻塞了线程
  3. async function show(){
  4. console.log("script");
  5. var res=await go();
  6. console.log(res)
  7. }
  8. async function go(){
  9. return 1;
  10. }
  11. show();
  12. var p=new Promise((resolve,reject)=>{
  13. console.log(2);
  14. resolve(3);
  15. })
  16. p.then((res)=>{
  17. console.log(res)
  18. })
  19. console.log("script")
  20. //
  21. script
  22. 2
  23. script
  24. 1
  25. 3