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].id
console.log(id)
return id;
}).then(res=>{
let id=res
http(`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")
//
script
2
script
1
3