5-1 async
它保证函数的返回值为 promise。我们可以使用.then()块,因为它返回的是 promise
<script>// 可以将一个普通函数的返回值变成promiseasync function go(){return "p"}console.log(go());//Promise {<fulfilled>: 'p'}go().then(res=>{console.log(res);//p})</script>
5-2 await
await 只在异步函数里面才起作用
1.await会执行promise的resolve的状态,相当于执行了then函数2.await会将函数阻塞,会优先执行同步不耗时的任务
<script>// 1、await关键字只能在async函数使用,不能在普通函数中使用// 2、await 相当于 then 获取promise--resolve的结果async function show(){console.log("start");var p = await go()console.log(p); //midconsole.log("end");}async function go(){return "mid"}show()</script>
<script>// await 后面不一定跟promise//await会将函数阻塞,会优先执行同步不耗时的任务 再去执行await完毕之后的内容async function show(){console.log("start");await mid();console.log("end");}async function mid(){console.log("mid");// return 1}show()console.log("a1");//star mid a1 end</script>
<script>// await 会阻塞函数的执行。会优先执行await后面同步的代码,异步代码等待同步代码执行完毕之后再去执行async function a1(){console.log("a1");await a2()console.log("end");}async function a2(){console.log("a2");}a1();console.log("a3");Promise.resolve().then(()=>{console.log("a4");})//a1,a2,a3,end,a4</script>
5-3 async / await 建立在 promises 之上
<!-- await async可以将异步变成同步代码 --><script>var url = 'http://47.108.197.28:3000/top/playlist';async function show(){var res = await $.ajax({url});var id = res.playlists[0].id //6827562995console.log(res.playlists[0].id);var url02 = `http://47.108.197.28:3000/playlist/detail?id=${id}`var detail = await $.ajax({url:url02});console.log(detail);//{code: 200, relatedVideos: null, playlist: {…}, urls: null,privileges:Array(10), …}}show()</script>
