1 -定义
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>
2- promise 的三种状态
1. pending 等待 冻结2. fulfilled (resolved) 成功的状态 调用reslove函数,获取就是resolved状态3. rejected (reject) 失败的状态 调用 reject函数,获取reject的状态
var p = new Promise((resolve,reject)=>{ resolve(100) reject(100)})console.log(p) // fulfilled状态
2-1 状态切换
// pending -->resolvedvar p = new Promise((resolve,reject)=>{ setTimeout(()=>{ resolve(100) },1000)})console.log(p)setTimeout(()=>{ console.log(p)},2000)
3- 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 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>