关于es6的模块化和_promise

154 阅读4分钟

es6模块化:es6之前:

  • amd规范
  • cmd规范

es6之后:

  • es6模块化
    • 每个 js 文件都是一个独立的模块
    • 导入其它模块使用 import 关键字
    • 向外共享模块使用 export 关键字
  • commonJS规范(nodejs)
    • 导入其它模块使用 require关键字
    • 向外共享模块使用 module.exports关键字 es6之前:
  • amd规范

  • cmd规范

es6之后:

  • es6模块化
    • 每个 js 文件都是一个独立的模块
    • 导入其它模块使用 import 关键字
    • 向外共享模块使用 export 关键字
  • commonJS规范(nodejs)
    • 导入其它模块使用 require关键字

    • 向外共享模块使用 module.exports关键字

    让nodejs支持ES6模块化

node.js 中默认支持 CommonJS 模块化规范,如果想基于 node.js 体验与学习 ES6 的模块化语法,需要按照如下两个步骤进行配置

  • 确保安装了 v13.0.0 或更高版本的 node.js
  • 在 package.json 的根节点中添加 "type": "module"节点

Snipaste_2022-04-30_22-43-11.png

注意: 配置之后,则只能使用ES6模块化语法,CommonJS语法就不管用了

默认导入导出

默认导出的语法: export default 默认导出的成员

默认导入的语法: import 接收名称 from '模块路径

注意:

  1. 每个模块中,只允许使用唯一的一次 export default
  2. 默认导入时的接收名称可以任意名称,只要是合法的成员名称即可

按需导入导出

按需导出的语法: export const s1 = 10

按需导入的语法: import { 按需导入的名称 } from '模块路径'

注意:

  1. 每个模块中可以有多次按需导出
  2. 按需导入的成员名称必须和按需导出的名称保持一致
  3. 按需导入时,可以使用 as 关键字进行重命名

默认导出和整体导出一起使用

拓展:让chrome浏览器支持es6模块化

文件目录

- index.html # 引入 index.js
- index.js   # 引入 tool.js 
- tool.js

index.html

<!DOCTYPE html>
<html lang="zh">
  注意这里的module
  <script type="module" src="./index.js"></script> 
</html>

index.js

import {a,b} from './tool.js'
console.log(a,b)

tool.js

export const a = 1;
export const b = 2;

_promise

它是一个ES6提出一个新语法,用来优化异步代码的写法

  • 在前端领域是我们必须要会的一个内容
  • 后续的课程中也会多次使用

promise:承诺

  • 生活中,它是用来表述 对将来要发生的事情的肯定。 例如 : 高中生说,老师,我会考上一所好大学的;销售员说,老板,我一定会签下大单的;程序员说,老妈,我过年一定会带个女朋友回来的。
  • 在ES6中,它是新增的构造器(Array, Object, Promise),用来优化实现异步操作。在没有它之前,javascript中的异步处理,大多是利用回调函数来实现的。典型的几种如下:(1)setTimeout (2)ajax (3)nodejs中的文件读取。现在有了promise,就可以对这些异步操作进行改写了。

要点:

  • 构造器必须要给定一个参数,如果不给就是会报错。例如,new Promise() 报错的信息是: Promise resolver undefined is not a function
  • 构造器的实参是一个函数,这个函数的特殊之处在于它有两个形参(resolve,reject),这两个形参也是函数。在格式上,也可以采用箭头函数来改写。例如:var p1 = new Promise((resolve,reject)=>{})
  • 在函数体的内部, 一般会执行异步代码,然后根据情况来调用resolve()或者是reject() 。调用resolve或者是reject后会产生什么样的后果,在后面小节介绍。 当然了,再次强调一下resolve和reject只是形参名,可以改写成其它的

报错图如下:

Snipaste_2022-04-30_23-03-59.png

三种状态和值

一个Promise对象的状态可能是如下三种之一:pending,resolved,rejected 。下面分别介绍

初始态pending

pending。它的意思是 "待定的,将发生的",相当于是一个初始状态。 创建Promise对象时,且没有调用resolve或者是reject方法,相当于是初始状态。这个初始状态会随着你调用resolve,或者是reject函数而切换到另一种状态。

var p = new Promise((resolve,rejectok,err)=>{ console.info('发呆.....' )})
console.dir(p)

这个初始状态就是你对别人说出承诺的那个瞬间,此时,大家都不知道这个承诺是否能兑现。

成功态resolved

也有叫fulfilled的。

resolved。表示解决了,就是说这个承诺实现了。 要实现从pending到resolved的转变,需要在 创建Promise对象时,在函数体中调用了resolve方法(即第一个参数)。

var p = new Promise((resolve,reject)=>{ resolved();})
console.dir(p)

注意,上面的resolve和reject仅是形参名而已。

失败态rejected

rejected。拒绝,失败。表示这个承诺没有做到,失败了。要实现从pending到rejected的转换,只需要在创建Promise对象时,调用reject函数。

var p = new Promise((resolve,reject)=>{ reject()} )
console.dir(p)