概念:
promise是为了解决异步问题而诞生的
目的:
为了解决异步任务而诞生,可以将一个异步的流程变为同步的
promise有三种状态:
promise — 会将函数的状态暂停(凝聚,冻结)
resolve — 处理成功的情况
reject — 处理失败的情况
promise不会直接触发,它会通过(then,catch)才会触发
1.触发promise的resolve状态,可以then函数去触发<br /> 2.触发reject状态,通过catch函数去触发
var p = new Promise((resolve, reject) => {// resolve(1);reject(2);})p.then(res=>{console.log(res)}).catch(err=>{console.log(err)})
1.async
在函数前面加上async,那么函数的返回值就是有一个promise
async function go() {return 10;}
得到promise的执行结果
1.then
2.await (但是只能在async函数中使用,后面只能是promise)
2.await
async function getResult(){var res = await go();console.log(res)}getResult()
3.promise-ajax
function http(url){return new Promise((resolve,reject)=>{$.ajax({url:`http://192.168.4.18:3000/${url}`,type:"get",success:res=>{resolve(res)},error:err=>{reject(err)}})})}
http("top/playlist/?cat=华语").then(res=>{let id = res.playlists[0].id;return id;}).then(res=>{let id = reshttp(`playlist/detail?id=${id}`).then(res=>{var {name,id} = res.playlist.tracks[0]console.log(id);})})
-
function http(url){return new Promise((resolve,reject)=>{$.ajax({url:`http://192.168.4.18:3000/${url}`,type:"get",success:res=>{resolve(res)},error:err=>{reject(err)}})})}
/*top/playlist/?cat=华语playlist/detail?id=${id}*/async function go(){var res = await http("top/playlist/?cat=华语");var id = res.playlists[0].id;var detail =await http(`playlist/detail?id=${id}`);console.log(detail)}go()
4.异步的终极解决方案
/* promise,async,await */var a = new Promise((resolve, reject) => {setTimeout(() => {resolve(1)}, 2000)})var b = new Promise((resolve, reject) => {setTimeout(() => {resolve(2)}, 1000)})/* async await *//*promise函数执行1.then2.在async函数中,通过await语句去执行*/function go(){var res = await a;console.log(res)var sum = await b;console.log(sum);}/* 在函数前面加上async1.这个函数的返回值就是promise2.可以在函数中使用await关键字*/go()/*await可以得到promise的执行结果,await语句后面只能是promise*/
