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. })

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>

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>

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

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()

例子

<script>
        /* 
        1.async关键字可以将一个普通函数变为promise
        2.    
     */
        async function getCat(){
            return "华语"
        }
        async function detail(){
            return "detail"
        }
        async function url(){
            return "url"
        }
        async function getRes(){
            var cat =await getCat();
            console.log(cat)
            var details=await detail();
            console.log(details);
            var Url=await url();
            console.log(Url);
        }
        getRes();
    </script>

网易云音乐接口

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

lib/http.js

var baseUrl="https://music.aityp.com/";
function http(url,data){
    return new Promise((resolve,reject)=>{
        $.ajax({
            url:baseUrl+url,
            type:"get",
            data,
            success: res=>{
                resolve(res)
            },
            error:err=>{
                reject(err)
            }
        })
    })
}
async function getRes(){
 var cat=await  http('top/playlist',{cat:"华语"})
            var id=cat.playlists[0].id;
            var detail=await http('playlist/detail',{id})
            var url=await http('song/url',{id:detail.playlist.trackIds[0].id})
            console.log(cat)
            console.log(detail)
            console.log(detail.playlist.trackIds[0].id)
        }
        getRes()