当前位置:   article > 正文

学习笔记 JavaScript ES6 异步操作必备知识 单线程 Ajax_es6中ajax原理

es6中ajax原理

学习内容:

  • JS是单线程的
  • 同步任务与异步任务
  • Ajax
  • Callback Hell

JS是单线程的

单线程就是同一时间只做一件事,比如超市收银员结账,所以单线程就需要排队。

同步任务与异步任务

  1. const a = 6
  2. const b = 7
  3. console.log(a + b) // 同步操作
  4. // 异步操作
  5. setTimeout(() => {
  6. console.log(a + b)
  7. }, 1000);

再来看下面这个setTimeout(0)的例子:

小技巧:setTime()最小开始执行时间不是0,是4毫秒

判断下面的输出顺序是1,2,3,还是 1,3,2

  1. console.log(1);
  2. // 异步操作
  3. setTimeout(() => {
  4. console.log(2)
  5. }, 1000);
  6. console.log(3);
  7. --------
  8. 1
  9. 3
  10. 2

这个结果说明,需要等主线程中同步操作全都执行完以后,才开始执行异步操作。

Ajax

这是JS非常原始的发送http请求的例子,是Ajax的原理:

  1. // 1、创建XMLHttpRequest对象
  2. var xmlhttp
  3. var url = 'http://jsonplaceholder.typicode.com/users'
  4. // window.XMLHttpRequest这个对象存在,说明当前浏览器是IE7+或chrome
  5. if(window.XMLHttpRequest) {
  6. xmlhttp = new XMLHttpRequest()
  7. } else { // 兼容早期浏览器
  8. xmlhttp = new ActiveXObject('Microsoft.XMLHTTP')
  9. }
  10. // 2、发送请求
  11. xmlhttp.open('GET', url, true)
  12. xmlhttp.send()
  13. // 3、接收服务端响应
  14. xmlhttp.onreadystatechange = function () {
  15. if(xmlhttp.readyState === 4 && xmlhttp.status === 200) {
  16. var obj = JSON.parse(xmlhttp.responseText)
  17. console.log(obj);
  18. }
  19. }
  20. -----------------------------------------------------------
  21. (10) [{…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}]

把上面的代码封装成一个方法:

  1. function ajax(url, callback) {
  2. var xmlhttp;
  3. // 1、创建XMLHttpRequest对象
  4. // window.XMLHttpRequest这个对象存在,说明当前浏览器是IE7+或chrome
  5. if (window.XMLHttpRequest) {
  6. xmlhttp = new XMLHttpRequest();
  7. } else {
  8. // 兼容早期浏览器
  9. xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
  10. }
  11. // 2、发送请求
  12. xmlhttp.open("GET", url, true);
  13. xmlhttp.send();
  14. // 3、接收服务端响应
  15. xmlhttp.onreadystatechange = function () {
  16. if (xmlhttp.readyState === 4 && xmlhttp.status === 200) {
  17. var obj = JSON.parse(xmlhttp.responseText);
  18. callback(obj)
  19. }
  20. };
  21. }
  22. var url = "http://jsonplaceholder.typicode.com/users";
  23. // 这里定义一个方法,在请求回来之后能够得到结果
  24. ajax(url,res => {
  25. console.log(res)
  26. })
  27. -----------------------------------------------------------
  28. (10) [{…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}]

Callback Hell 

可读性差,维护性差,ES6中的异步解决方案可以解决这些问题

  1. ajax('a.json',res => {
  2. ajax('b.json',res => {
  3. ajax('c.json',res => {
  4. })
  5. })
  6. })

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Monodyee/article/detail/148270
推荐阅读
相关标签
  

闽ICP备14008679号