当同步任务执行完毕后,先去等待任务队列中的全部的微任务找出来,挨个执行,当微任务执行完毕,再把全部的宏任务执行;前端
微任务
- Promise 的 then
- async 函数中 await 后面的代码;
- process.nextTick
宏任务
定时器 setInterval 和 setTimeout
复制代码
async 和 await ES6新增关键字 将异步程序转为同步
- async 在函数定义时使用,用 async 函数声明的函数默认返回一个 promise 实例,返回值能够直接 .then
- await 右边若是是 Promise 就等着 Promise 状态发生变动,若是是同步代码直接执行;若是 await 执行的方法返回的 promise 对象,咱们能够直接在对象使用 then 方法;此外,await 下面的代码都会变成微任务
cookie 是 http 协议的一部分,不属于客户端也不属于服务端;
- cookie 存储在客户端 可是服务端和客户端均可以操做cookie
- cookie 用于记录用户的信息,而且在每次请求服务器的时候都会自动带上 cookie 的信息;等服务器接收到请求就能够从 cookie 获取到用户的信息,从这些信息中获知用户是否登陆;
js操做 cookie
- 获取 cookie document.cookie
- 设置 cookie document.cookie = 'key = value'
- 设置 cookie 是=时须要注意
- cookie 是个字符串,而且值要写成 'key=value;'的形式;
- cookie 设置能够同名,后面的并不会覆盖前面的
cookie 属性
- domain 当前能够访问 cookie 的域
- path 能够访问当前 cookie 的路径,通常设置为 / 表示根目录; 这个路径的子级能够访问上面的,可是高层级的路径不能访问低层级的 cookie;例如 path 设置为/a ,/a/b 可使用/a的 cookie;可是若是设置为 /a/b,/a就不能使用 /a/b 的 cookie;
- expires: cookie 的过时时间,cookie 都是有时效的,是个 GMT 时间,若是超过这个时间,cookie 失效,浏览器会删除它;(这也是删除 cookie 的原理,将 cookie 的过时时间设置为一个过去的时间,通常设置为 1970 年)
- maxAge cookie 有效期,和 expires 不一样,这个是一个以毫秒为单位的绝对时间,如 1000ms 或者 5000ms;(这个东西只能服务端设置)
- http-only: 表示该属性只能由 http 使用,不容许客户端经过 js 代码操做;
session 服务端技术 会话控制
和 cookie 不一样,session 是保存在服务器上的,并且并不会随着 http 传递;由于 cookie 保存在客户端,仍是很不安全的,服务器为了杜绝这种事情,在服务器上也搞了一个存储用户信息的东西,这就是 session。通常用于用户的登陆状态,用户 id 等敏感信息的保存; cookie 中保存着 session 的 id,在 http 请求中会带着 cookie 请求,服务器从 cookie 中获取 session 的 idpromise
1. 以登陆为例,当咱们登陆后,服务端会在 cookie 中设置当前用户的登陆状态为已经登陆,
2. 同时在服务器上生成一份 session 文件,session 中存储用户 id,登陆状态的有效期限等;这个 session 文件有一个 id,生成 session 文件后,服务器还会把 session-id 写进 cookie。而后返回给客户端,此时用户的客户端收到的 cookie 中包含登陆状态和 session-id;
3. 等下一次再去请求时,http 协议会自动带着全部的 cookie 去请求;等服务器收到请求后,从 cookie 中把用户信息拿出来,而后再根据 session-id 把 session 读取出来,再从 session 中查询登陆状态,若是登陆状态有效,就继续正常的响应,不然就返回登陆失效的状态,要求用户登陆;
复制代码
token 令牌 身份校验机制 是一个字符串,这个字符串通常是加密过的,通常包含了用户 id,登陆的时间戳,以及 sign (签名,生成 token 的前几位进行加密的结果,能够防止 token 被篡改,一旦篡改了后面这一段和前面的对不上了);
- 通常在用户登陆时,客户端把用户的用户名和密码传递给服务器,服务端进行校验,若是没有问题,就会生成一个 token;
- 生成 token 后,服务器把 token 返回给前端,而后前端下次请求的时候须要带上这个 token,而后服务端在接收到请求后会首先校验这个 token 是否有效,若是有效继续受理请求,若是无效则直接拒绝;
使用token的方式
- 服务端也能够直接把 token 写进 cookie 中,下次客户端发起请求时会自动带上;
- 服务端也能够做为数据返给前端,可是前端此时须要手动的保存 这个 token,能够保存在 localStorage 中,下次发请求时从 ls 中取出做为参数传给服务器便可
- 服务端返回 token 后,客户端能够把这个 token 写进请求头中,而后服务端每次从请求头中获取; 具体使用哪种,须要和服务端商定;