promise 会将函数的状态暂停(凝聚,冻结)
resolve — 处理成功的情况
reject — 处理失败的情况
promise不会直接触发,它会通过(then,catch)才会触发
1.触发promise的resolve状态,可以then函数去触发
2.触发reject状态,通过catch函数去触发**
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<!-- 3种 -->
<!-- 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>
</body>
</html>
promise封装ajax
将纵向嵌套的ajax,变成横向的了,结构稍微清晰了一点。
function http(url){
return new Promise((resolve,reject)=>{
$.ajax({
url,
type:"get",
success:res=>{
resolve(res)
},
error:err=>{
reject(err);
}
})
})
}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<script src="https://cdn.bootcss.com/jquery/3.4.1/jquery.js"></script>
<script src="promise-ajax/index.js"></script>
</head>
<body>
<script>
http("top/playlist/?cat=华语").then(res=>{
let id = res.playlists[0].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>
</body>
</html>
callback封装jquery-ajax
function http({url,type="get",success}){
$.ajax({
url,
type,
dataType:"json",
success:res=>{
success(rs)
}
})
}