ES6模块化语义化编程.js

node.js--遵循 CommonJS的模块化规范。

1、导入模块:requrie();

模块对外共享成员:module.exports对象

ES6模块化---

2、ES6模块化规范的定义:

每个js文件都是一个独立的模块
导入其他模块成员使用 import 关键字
向外共享模块成员使用 export 关键字

3、node.js体验ES6模块化

①. 版本需高于v14.15.1
②. 在package.json的根节点中添加"type":"module"

4、(1)默认导出的语法:

// 语法:export defalut 默认导出的成员

let n1 = 10;
let n2 = 20;
function show() {

}

export default {
    n1,
    show
}

//export defalut   
//每个模块中,只能使用唯一一次,否则会报错
(2)默认导入的语法:
语法: import 接收名称 from "模块标识符"

import m1 from "./01默认导出.js";

(3)按需导出的语法:

export let s1 = 'aaa'
export let s2 = 'ccc'
export function say() { }

(4)按需导入的语法:

import { s1, s2 } from "./03按需导出.js"

import { s1, s2 as str2 } from "./03按需导出.js"

// as关键字---重命名
// s2改为str2

(5)直接运行模块中的代码

语法:import "模块标识符"

import "./05直接运行模块中的代码.js"

按需导入和导出的区别(注意事项):

1.默认导出只可使用一次,但按需导出可以使用多次
2.按需导入的成员名称必须和按需导出的名称保持一致
3.按需导入时,可以使用as作为关键字进行重命名
4.按需导入可以和默认导入一起使用

回调地狱:多层回调函数的相互嵌套。(回调套回调) 面试

解决回调地狱的方法:ES6新增的Promise

Promise---

①.一个构造函数
new出来的Promise 实例对象,代表一个异步操作。
const p= new Promise();
②.Promise.prototyp e 上包含 .then()方法
实例对象可以通过原型链的方式访问到.then()方法
③.  .then()方法用来预先指定成功和失败的回调函数
p.then(成功的回调函数,失败的回调函数)  成功的回调函数必选。失败的回调函数可选    (无法保证文件的读取顺序)

then()方法的特性---

上一个.then()方法返回了一个新的Promise实例对象,可以通过下一个.then()继续处理。-----链式调用,用来解决回调地狱的问题

通过promise.prototype.catch()的方法捕获到错误

  .catch((err) => {
        console.log(err.message);
    })
   
 ①..catch()可以放在最后边
 ②.如果不希望前面的错误导致后边的代码不再执行,可将.catch()向前提

promise.all()方法:等所有的异步操作全部结束之后去执行下一步的.then()操作(等待机制)按顺序返回所有的结果

promise.race()方法:返回最快的结果

基于promise封装读文件的方法:

import fs from 'fs'
function getFile(fpath) {
    return new Promise(function (resolve, reject) {
        fs.readFile(fpath, 'utf8', (err, dataStr) => {
            if (err) return reject(err)
            resolve(dataStr);
        })
    })
}
getFile('./files/1.txt').then((r1) => {
    console.log(r1);
}, (err) => {
    console.log(err.message);
});

async和await的基本使用:

import thenFs from 'then-fs';
async function getAllFile() {
    const r1 = await thenFs.readFile("./files/1.txt", 'utf8');
    console.log(r1);
    const r2 = await thenFs.readFile("./files/2.txt", 'utf8');
    console.log(r2);
    const r3 = await thenFs.readFile("./files/3.txt", 'utf8');
    console.log(r3);
}

getAllFile()

注意事项:

1、如果function内部有用到await,则function必须被async修饰

2、在async 方法中,第一个 await 之前的代码会同步执行,之后的代码会异步执行

同步任务和异步任务:

① 同步任务---非耗时任务

主线程上排队执行的任务(前一个任务执行完毕,才能执行下一个任务)

② 异步任务----耗时任务

异步任务由javascript委托给宿主环境进行执行(异步任务执行完成后,会通知javascript主线程执行异步任务的回调函数)

EvenLoop(事件循环)


1624290340919.png

宏任务和微任务:

宏任务和微任务的执行顺序:

宏任务执行完后,检查是否有微任务,如果有微任务,则执行微任务,后继续执行宏任务。

宏任务:

1、异步的Ajax请求
2、setTimeout setInterval
3、文件操作
4、其他宏任务

微任务:

1、Promise.then()  .catch   .finally
2、process.nextTick
3、其他微任务
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 一.node知识 1.回调函数,即异步IO的node处理方式:时间循环,观察者,请求对象,io线程。 先在线程池处...
    Daniel_adu阅读 869评论 0 1
  • 本文来自 悟尘纪,获取更新内容可查看原文: https://www.lixl.cn/2020/011231581....
    悟尘80阅读 391评论 0 1
  • 一、学习目的和任务 1. 学习目的 了解服务端编程; 使用 Express 构建 Web 项目; 2. 学习任务 ...
    康小曹阅读 152评论 0 1
  • Node.js 服务端开发要做的事情:实现网站的业务逻辑,数据的增删改查。 Node是一个基于Chrome V8引...
    coder_shen阅读 215评论 0 0
  • 本文首发在个人博客:http://muyunyun.cn/posts/7b9fdc87/ 提到 Node.js, ...
    牧云云阅读 1,704评论 0 3