概念:
promise是为了解决异步问题而诞生的
目的:
为了解决异步任务而诞生,可以将一个异步的流程变为同步的
promise有三种状态:
promise — 会将函数的状态暂停(凝聚,冻结)
resolve — 处理成功的情况
reject — 处理失败的情况
promise不会直接触发,它会通过(then,catch)才会触发

  1. 1.触发promiseresolve状态,可以then函数去触发<br /> 2.触发reject状态,通过catch函数去触发
  1. var p = new Promise((resolve, reject) => {
  2. // resolve(1);
  3. reject(2);
  4. })
  5. p.then(res=>{
  6. console.log(res)
  7. }).catch(err=>{
  8. console.log(err)
  9. })

1.async

在函数前面加上async,那么函数的返回值就是有一个promise

  1. async function go() {
  2. return 10;
  3. }

得到promise的执行结果
1.then
2.await (但是只能在async函数中使用,后面只能是promise)

2.await

  1. async function getResult(){
  2. var res = await go();
  3. console.log(res)
  4. }
  5. getResult()

3.promise-ajax

  1. function http(url){
  2. return new Promise((resolve,reject)=>{
  3. $.ajax({
  4. url:`http://192.168.4.18:3000/${url}`,
  5. type:"get",
  6. success:res=>{
  7. resolve(res)
  8. },
  9. error:err=>{
  10. reject(err)
  11. }
  12. })
  13. })
  14. }
  1. http("top/playlist/?cat=华语").then(res=>{
  2. let id = res.playlists[0].id;
  3. return id;
  4. }).then(res=>{
  5. let id = res
  6. http(`playlist/detail?id=${id}`).then(res=>{
  7. var {name,id} = res.playlist.tracks[0]
  8. console.log(id);
  9. })
  10. })

-

  1. function http(url){
  2. return new Promise((resolve,reject)=>{
  3. $.ajax({
  4. url:`http://192.168.4.18:3000/${url}`,
  5. type:"get",
  6. success:res=>{
  7. resolve(res)
  8. },
  9. error:err=>{
  10. reject(err)
  11. }
  12. })
  13. })
  14. }

  1. /*
  2. top/playlist/?cat=华语
  3. playlist/detail?id=${id}
  4. */
  5. async function go(){
  6. var res = await http("top/playlist/?cat=华语");
  7. var id = res.playlists[0].id;
  8. var detail =await http(`playlist/detail?id=${id}`);
  9. console.log(detail)
  10. }
  11. go()

4.异步的终极解决方案

  1. /* promise,async,await */
  2. var a = new Promise((resolve, reject) => {
  3. setTimeout(() => {
  4. resolve(1)
  5. }, 2000)
  6. })
  7. var b = new Promise((resolve, reject) => {
  8. setTimeout(() => {
  9. resolve(2)
  10. }, 1000)
  11. })
  12. /* async await */
  13. /*
  14. promise函数执行
  15. 1.then
  16. 2.在async函数中,通过await语句去执行
  17. */
  18. function go(){
  19. var res = await a;
  20. console.log(res)
  21. var sum = await b;
  22. console.log(sum);
  23. }
  24. /* 在函数前面加上async
  25. 1.这个函数的返回值就是promise
  26. 2.可以在函数中使用await关键字
  27. */
  28. go()
  29. /*
  30. await可以得到promise的执行结果,await语句后面只能是promise
  31. */