Blogger Information
Blog 34
fans 0
comment 0
visits 19981
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
异步与模块
OC的PHP大牛之路
Original
338 people have browsed it

异步

同步: 顺序执行, 优点: 静态预判结果可控, 缺点: 耗时任务阻塞执行
异步: 乱序执行, 优点: 不会阻塞代码,体验好, 缺点: 顺序不可控

异步任务(耗时)

  1. 定时任务: setTimeout, setInterval
  2. 事件监听: addEventListener
  3. 网络请求: ajax, promise,fetch
  4. 文件读写等涉及IO的操作

ajax-xhr

传统方式,信息会在新页面中或者弹窗中查看,用户体验不好
Ajax: 局部更新,用户不需要离开当前页面就可以看到新内容, 单页面应用SPA

传统 XHR

  1. 1. 创建对象: new XMLHttpRequest();
  2. 2. 响应类型: xhr.responseType = "json";
  3. 3. 配置参数: xhr.open("GET", url, true);
  4. 4. 请求回调: xhr.onload = () => console.log(xhr.response);
  5. 5. 失败回调: xhr.onerror = () => console.log("Error");
  6. 6. 发起请求: xhr.send(null);

xhr 至少监听2个事件: load,error, 调用2个函数: open,send
post请求,需要设置一下请求头与请求的数据,其它与get请求完全相同

  1. function getUser1(btn) {
  2. //1. 创建对象
  3. const xhr = new XMLHttpRequest();
  4. //2. 响应类型
  5. xhr.responseType = 'json';
  6. //3. 配置参数
  7. // 不传get参数,默认返回全部用户, 用table显示
  8. let url = 'http://website.io/users.php';
  9. // 如果有get参数,用户id,用ul列表显示
  10. url = 'http://website.io/users.php?id=1';
  11. xhr.open('GET', url);
  12. //4. 请求回调
  13. xhr.onload = () => {
  14. console.log(xhr.response);
  15. // 将数组渲染到页面中
  16. render(xhr.response, btn);
  17. };
  18. //5. 失败回调
  19. xhr.onerror = () => console.log('Error');
  20. //6. 发起请求
  21. xhr.send(null);
  22. }

fetch

  1. fetch(url)
  2. .then(res)
  3. .then(...)
  4. .catch(err)
  1. function getUser2(btn) {
  2. let url = 'http://website.io/users.php';
  3. // fetch的所有操作都是异步的,但是通过then使用顺序可控
  4. fetch(url)
  5. .then(function (response) {
  6. return response.json();
  7. })
  8. .then(function (json) {
  9. // 控制台
  10. console.log(json);
  11. // 将数组渲染到页面中
  12. render(json, btn);
  13. });
  14. }

JS模块

  1. 模块就是一个js文档
  2. 模块有自己的独立作用域(全局,函数,块)
  3. 模块内成员,默认全部私有,只有导出后才可以被外部使用

模块成员导出与导入

  1. <script type="module">
  2. // js中, 所有代码共用一个全局作用域: window
  3. // 导入模块
  4. import { username, hello } from './modules/m1.js';
  5. console.log(username);
  6. console.log(hello(username));
  7. </script>

默认导出

  1. <script type="module">
  2. // 导入模块的默认成员不要用对象字面量,用标识符
  3. // 只要不用对象字面量接收模块成员,就是默认导出
  4. import User from './modules/m3.js';
  5. console.log(typeof User);
  6. const user = new User('王老师');
  7. console.log(user.username);
  8. console.log(user.getUsername(user.username));
  9. </script>

混合导出

  1. <script type="module">
  2. // 接收混合导入成员,默认成员的命名,必须放在非默认的前面
  3. // import useremail, { username, hello } from './modules/m4.js';
  4. // 默认导出成员,在导入时可以随意命名的,useremail只是巧合
  5. import email, { username, hello } from './modules/m4.js';
  6. // console.log(useremail);
  7. console.log(email);
  8. console.log(hello(username));
  9. </script>

命名空间

  1. <script type="module">
  2. // 导入的成员,过多时,使用{...}会很长的
  3. // 可以将所有的导入成员,全部挂载到一个对象上
  4. // 此时, 导入模块的成员,自动成为该对象上的属性
  5. // 这个对象就是: 命名空间
  6. // import email, { username, hello } from './modules/m4.js';
  7. import * as user from './modules/m4.js';
  8. console.log(user);
  9. // 此时,访问模块成员时, 必须添加空间前缀,其实就是user对象
  10. console.log(user.username);
  11. console.log(user.hello(user.username));
  12. // 访问默认
  13. console.log(user.default);
Correcting teacher:PHPzPHPz

Correction status:qualified

Teacher's comments:
Statement of this Website
The copyright of this blog article belongs to the blogger. Please specify the address when reprinting! If there is any infringement or violation of the law, please contact admin@php.cn Report processing!
All comments Speak rationally on civilized internet, please comply with News Comment Service Agreement
0 comments
Author's latest blog post