Promise是一种异步操作的解决方案,将写法复杂的传统的回调函数和监听事件的异步操作,用同步代码的形式表达出来。避免了多级异步操作的回调函数嵌套。promise本质:为了解决回调地狱问题<!-- promise 会将函数的状态暂停(凝聚,冻结)resolve -- 处理成功的情况reject -- 处理失败的情况promise不会直接触发,它会通过(then,catch)才会触发--><!--1.触发promise的resolve状态,可以then函数去触发2.触发reject状态,通过catch函数去触发--><script>var p = new Promise((resolve,reject)=>{//resolve(1)reject(2)})p.then(res=>{console.log(res);}).catch(err=>{console.log(err);})</script>
promise-ajax
function http() {return new Promise((resolve,reject)=>{$.ajax({url:"http://192.168.4.18:3000/top/playlist/?cat=华语",type:"get",success:res=>{resolve(res)},error:err=>{reject(err)}})})}
<script>http("top/playlist/?cat=华语").then(res=>{let id=res.playlists[0].idconsole.log(id)return id;}).then(res=>{let id=reshttp(`playlist/detail?id=${id}`).then(res=>{var {name,id}=res.playlist.tracks[0]console.log(id)})})</script>
promise和定时器执行顺序 异步
promise优先于定时器
console.log("3");setTimeout(() => {console.log(2)}, 1000);Promise.resolve().then(()=>{console.log(1)}) //3 1 2
await 阻塞线程 遇到await会从函数中出,去执行其它同步代码
async function show(){console.log(1);var res=await 100;console.log(res)}show();console.log(2);setTimeout(() => {console.log(3)}, 1000);// 1 2 100 3
await的作用1.获取promise结果2.阻塞了线程async function show(){console.log("script");var res=await go();console.log(res)}async function go(){return 1;}show();var p=new Promise((resolve,reject)=>{console.log(2);resolve(3);})p.then((res)=>{console.log(res)})console.log("script")//script2script13
