1.async

  1. /*如果函数前面加上async关键字,函数会变成一个promise*/
  2. async function go(){
  3. return 1
  4. }
  5. console.log(go())
  6. /*通过then去执行*/
  7. go().then(res=>{
  8. console.log(res)
  9. })

image.png

1.1async嵌套的问题

  1. /* await:就是跟在它后面的promise执行完毕之后才会执行下面的代码 */
  2. /* forEach是一个同步的 */
  3. async function go(){
  4. return "go"
  5. }
  6. var arr=['html','css','js','vue']
  7. // console.log(1);
  8. // arr.forEach(item=>{
  9. // console.log(item)
  10. // })
  11. // console.log(2)
  12. /* async是一个promise,不能马上触发 */
  13. async function test(){
  14. console.log(1);
  15. await arr.forEach(async item=>{
  16. var data=await go();
  17. console.log(data)
  18. })
  19. console.log(2)
  20. }
  21. test()
  22. /* 输出结果
  23. 1
  24. go(4)
  25. 2
  26. */
  27. </script>

image.png

2.await

  1. 执行一个promise
  2. await一定要跟promise
  3. await一定要在async函数里面使用
  4. 跟在await后面的promise执行完毕之后,才会继续执行后面的参数
    1. <script>
    2. async function go(){
    3. return 1;
    4. }
    5. async function getRes(){
    6. var data=await go();
    7. console.log(data)
    8. }
    9. getRes()
    10. </script>
    image.png

    2.1通过await可以将异步变成同步

    1. async function go(){
    2. return new Promise((resolve,reject)=>{
    3. resolve(1);
    4. reject(2)
    5. })
    6. }
    7. async function getRes(){
    8. var data=await go();
    9. console.log(data);
    10. console.log(4)
    11. }
    12. getRes()
    13. //1 4
    image.png

    2.2await原生同步例子

    1. async function go(){
    2. return "go"
    3. }
    4. var arr=['html','css','js','vue']
    5. async function test(){
    6. console.log(1);
    7. for(let i=0;i<arr.length;i++){
    8. var data=await go();
    9. console.log(data);
    10. }
    11. console.log(2)
    12. }
    13. test()
    image.png

    例子

    1. <script>
    2. /*
    3. 1.async关键字可以将一个普通函数变为promise
    4. 2.
    5. */
    6. async function getCat(){
    7. return "华语"
    8. }
    9. async function detail(){
    10. return "detail"
    11. }
    12. async function url(){
    13. return "url"
    14. }
    15. async function getRes(){
    16. var cat =await getCat();
    17. console.log(cat)
    18. var details=await detail();
    19. console.log(details);
    20. var Url=await url();
    21. console.log(Url);
    22. }
    23. getRes();
    24. </script>
    image.png

    网易云音乐接口

    1. <script src="https://cdn.bootcss.com/jquery/3.4.1/jquery.js"></script>
    2. <script src="lib/http.js"></script>

lib/http.js

  1. var baseUrl="https://music.aityp.com/";
  2. function http(url,data){
  3. return new Promise((resolve,reject)=>{
  4. $.ajax({
  5. url:baseUrl+url,
  6. type:"get",
  7. data,
  8. success: res=>{
  9. resolve(res)
  10. },
  11. error:err=>{
  12. reject(err)
  13. }
  14. })
  15. })
  16. }
  1. async function getRes(){
  2. var cat=await http('top/playlist',{cat:"华语"})
  3. var id=cat.playlists[0].id;
  4. var detail=await http('playlist/detail',{id})
  5. var url=await http('song/url',{id:detail.playlist.trackIds[0].id})
  6. console.log(cat)
  7. console.log(detail)
  8. console.log(detail.playlist.trackIds[0].id)
  9. }
  10. getRes()

image.png