课堂连接

1-什么是promise

  1. 监听器
  2. 怎么样实现一个promise new
  3. promise函数中传递两个参数
  4. resolve -->处理成功 then去触发resolve
  5. reject -->处理失败 catch去触发 reject
  6. 这两个函数不会马上执行
  7. thencatch只会触发一个
  8. promise其实就是为了方便程序员阅读代码
  9. 本质上就是为了替代回掉函数的

2-简写:

  1. var p=Promise.resolve(100)
  2. var r=Promise.reject(200)
  3. console.log(p)
  4. r.catch(err=>{
  5. console.log(err);
  6. })

image.png

3-回调地狱:

两段http请求存在依赖,嵌套关系的时候就会造成回掉地狱

  1. <script>
  2. var url = `http://47.108.197.28:3000/top/playlist`;
  3. $.ajax({
  4. url,
  5. success:res=>{
  6. var {name,id,coverImgUrl} = res.playlists[0];
  7. $("#name").html(name)
  8. $("img").attr("src",coverImgUrl)
  9. /* 获取歌曲详情相关的数据 */
  10. var url = `http://47.108.197.28:3000/playlist/detail?id=${id}`;
  11. $.ajax({
  12. url,
  13. success:res=>{
  14. console.log(res.playlist.description)
  15. var detail = res.playlist.description;
  16. $("#detail").html(detail)
  17. }
  18. })
  19. }
  20. })
  21. </script>
  1. <script src="http/callhttp.js"></script>
  2. function http({
  3. url,
  4. success
  5. }){
  6. $.ajax({
  7. url,
  8. success:res=>{
  9. success(res)
  10. }
  11. })
  12. }
  13. <script>
  14. /* promise其实就是为了方便程序员阅读代码
  15. 本质上就是为了替代回掉函数的
  16. */
  17. var url = 'http://47.108.197.28:3000/top/playlist';
  18. // http(url).then(res=>{
  19. // console.log(res)
  20. // }).then()
  21. http({
  22. url,
  23. success:res=>{
  24. console.log(res)
  25. http({
  26. url:`http://47.108.197.28:3000/playlist/detail?id=6827562995`,
  27. success:res=>{
  28. console.log(res)
  29. }
  30. })
  31. }
  32. })
  33. </script>
  1. <script src="http/http.js"></script>
  2. /* 通过promise封装http请求 */
  3. function http(url){
  4. return new Promise((resolve,reject)=>{
  5. $.ajax({
  6. url,
  7. success:res=>{
  8. resolve(res)
  9. },
  10. error:err=>{
  11. reject(err);
  12. }
  13. })
  14. })
  15. }
  16. <script>
  17. /* promise其实就是为了方便程序员阅读代码
  18. 本质上就是为了替代回掉函数的
  19. */
  20. var url = 'http://47.108.197.28:3000/top/playlist';
  21. http(url).then(res=>{
  22. var id = res.playlists[0].id
  23. return id;
  24. }).then(id=>{
  25. var url = `http://47.108.197.28:3000/playlist/detail?id=${id}`;
  26. http(url).then(res=>{
  27. console.log(res)
  28. })
  29. })
  30. </script>

4-forEach 不支持异步循环

  1. <script>
  2. var t1 = new Promise((resolve)=>{
  3. setTimeout(()=>{
  4. resolve("100")
  5. },1000)
  6. })
  7. var t2 = new Promise((resolve)=>{
  8. setTimeout(()=>{
  9. resolve("200")
  10. },1000)
  11. })
  12. var t3 = new Promise((resolve)=>{
  13. setTimeout(()=>{
  14. resolve("300")
  15. },1000)
  16. })
  17. var arr = [t1,t2,t3];
  18. arr.forEach(async item=>{
  19. var res = await item;
  20. console.log(res)
  21. })
  22. </script>