5-1 async

它保证函数的返回值为 promise。我们可以使用.then()块,因为它返回的是 promise

  1. <script>
  2. // 可以将一个普通函数的返回值变成promise
  3. async function go(){
  4. return "p"
  5. }
  6. console.log(go());//Promise {<fulfilled>: 'p'}
  7. go().then(res=>{
  8. console.log(res);//p
  9. })
  10. </script>

5-2 await

await 只在异步函数里面才起作用

  1. 1.await会执行promise的resolve的状态,相当于执行了then函数
  2. 2.await会将函数阻塞,会优先执行同步不耗时的任务
  1. <script>
  2. // 1、await关键字只能在async函数使用,不能在普通函数中使用
  3. // 2、await 相当于 then 获取promise--resolve的结果
  4. async function show(){
  5. console.log("start");
  6. var p = await go()
  7. console.log(p); //mid
  8. console.log("end");
  9. }
  10. async function go(){
  11. return "mid"
  12. }
  13. show()
  14. </script>
  1. <script>
  2. // await 后面不一定跟promise
  3. //await会将函数阻塞,会优先执行同步不耗时的任务 再去执行await完毕之后的内容
  4. async function show(){
  5. console.log("start");
  6. await mid();
  7. console.log("end");
  8. }
  9. async function mid(){
  10. console.log("mid");
  11. // return 1
  12. }
  13. show()
  14. console.log("a1");
  15. //star mid a1 end
  16. </script>
  1. <script>
  2. // await 会阻塞函数的执行。会优先执行await后面同步的代码,异步代码等待同步代码执行完毕之后再去执行
  3. async function a1(){
  4. console.log("a1");
  5. await a2()
  6. console.log("end");
  7. }
  8. async function a2(){
  9. console.log("a2");
  10. }
  11. a1();
  12. console.log("a3");
  13. Promise.resolve().then(()=>{
  14. console.log("a4");
  15. })
  16. //a1,a2,a3,end,a4
  17. </script>

5-3 async / await 建立在 promises 之上

  1. <!-- await async可以将异步变成同步代码 -->
  2. <script>
  3. var url = 'http://47.108.197.28:3000/top/playlist';
  4. async function show(){
  5. var res = await $.ajax({url});
  6. var id = res.playlists[0].id //6827562995
  7. console.log(res.playlists[0].id);
  8. var url02 = `http://47.108.197.28:3000/playlist/detail?id=${id}`
  9. var detail = await $.ajax({url:url02});
  10. console.log(detail);
  11. //{code: 200, relatedVideos: null, playlist: {…}, urls: null,privileges:Array(10), …}
  12. }
  13. show()
  14. </script>