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

例子

  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>

网易云音乐接口

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