5-1 async
它保证函数的返回值为 promise。我们可以使用.then()块,因为它返回的是 promise
<script>
// 可以将一个普通函数的返回值变成promise
async 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); //mid
console.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 //6827562995
console.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>