ES6入门知识

****************************************************************************************************************************************************************************

0、ES6学习目标
【1】整体目标
ES6的模块化语法
************************************************************
Promise解决回调地狱问题
************************************************************
async...await简化Promise调用
************************************************************
什么是EventLoop
************************************************************
宏任务和微任务的执行顺序

****************************************************************************************************************************************************************************

1、ES6模块化概念
【1】前端模块化分类。大一统ES6规范,使得学习与开发难度都降低了。
【2】浏览器与服务端通用的模块化开发规范。
*********************************************************************************
每个js都是一个独立的模块
*********************************************************************************
导入其他模块的成员,需要使用import关键字
*********************************************************************************
向外共享成员,使用export关键字

****************************************************************************************************************************************************************************

2、在node.js中体验ES6模块化
【1】确保安装V14.15.1或更高的node.js版本
【2】在package.json的根节点中添加"type":"module"节点
【3】npm init -y
package.json
******************************************************************************
{
  "type": "module",
  "name": "day",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo "Error: no test specified" && exit 1"
  },
  "keywords": [],
  "author": "",
  "license": "ISC"
}

****************************************************************************************************************************************************************************

3、默认导出导入
【1】3种用法
************************************************************默认导出
export default 默认导出的成员
let n1 = 10
let n2 = 20

function show() {

}

export default {
  n1,
  show
}
************************************************************默认导入
/*myImport.js*/
import n1 from './myExport.js'

console.log(n1)

****************************************************************************************************************************************************************************

4、默认导出导入的注意事项
【1】在每个模块中,只允许使用唯一一次export default。
【2】默认导入时,接收时候的成员名称可以任意命名,单需要合法。

****************************************************************************************************************************************************************************

5、按需导出导入
【1】导出
export let n1 = 10
export let n2 = 20

export function show() {

}
【2】导入
/*myImport.js*/
import {n1, n2, show} from './myExport.js'

console.log(n1)
console.log(n2)

****************************************************************************************************************************************************************************

6、按需导出导入的注意点
【1】按需导出每个模块中可以使用多次按需导出。
【2】按需导入的成员名称,必须和按需导出的名称一致。
【3】按需导入时,可以使用as关键字进行重命名。和数据库一样的操作...
【4】按需导出入可以和默认导出入一起使用

****************************************************************************************************************************************************************************

7、直接导入并执行模块中的代码
【1】myExport.js
for (let i = 0; i < 3; i++) {
  console.log(i)
}
【2】myImport.js
/*myImport.js*/
import './myExport.js'

****************************************************************************************************************************************************************************

8、Promise与回调地狱问题解决
【1】回调地狱说明
setTimeout(() => { // 第1层
  console.log('延时1秒后输出')
  setTimeout(() => { // 第2层
    console.log('延时2秒后输出')
    setTimeout(() => { // 第3层
      console.log('延时3秒后输出')
    }, 3000)
  }, 2000)
}, 1000)
【2】回调地狱的缺点:代码耦合性太强,难以维护。冗余代码多,可读性差。
【3】如何解决回调地狱?Promise

****************************************************************************************************************************************************************************

9、Promise的概念
【1】是一个构造函数,可以new Promise()
【2】Promise.prototype上包含一个.then()方法
【3】.then()方法可以预先指定成功和失败的回调函数
p.then(res=>{},err=>{})
********************************************************************
成功的回调函数是必选的,失败的是可选的。

****************************************************************************************************************************************************************************

10、基于回调函数按顺序读取文本Content
【1】一次读取1-3.txt
【2】安装then-fs包:npm i then-fs
*******************************************************************************
使用then-fs的readFile()方法,可以异步的读取文件内容,它的返回值是Promise实例对象
*******************************************************************************
import thenFs from 'then-fs'
/*下列代码无法保证读取顺序*/
thenFs.readFile('./1.txt', 'utf8').then(res => {
  console.log(res)
}, err => {
  console.log(err.message)
})

thenFs.readFile('./2.txt', 'utf8').then(res => {
  console.log(res)
}, err => {
  console.log(err.message)
})

thenFs.readFile('./3.txt', 'utf8').then(res => {
  console.log(res)
}, err => {
  console.log(err.message)
})

****************************************************************************************************************************************************************************

11、Promise按顺序读取
【1】升级10的代码,使用.then方法的链式调用
import thenFs from 'then-fs'
/*下列代码无法保证读取顺序*/
let promise = thenFs.readFile('./1.txt', 'utf8')
  .then(res1 => {
    console.log(res1)
    return thenFs.readFile('./2.txt', 'utf8')
  })
promise = promise.then(res2 => {
  console.log(res2)
  return thenFs.readFile('./3.txt', 'utf8')
})
promise.then(res3 => {
  console.log(res3)
})
【2】继续升级
import thenFs from 'then-fs'
/*下列代码无法保证读取顺序*/
thenFs.readFile('./1.txt', 'utf8')
  .then(res1 => {
    console.log(res1)
    return thenFs.readFile('./2.txt', 'utf8')
  })
  .then(res2 => {
    console.log(res2)
    return thenFs.readFile('./3.txt', 'utf8')
  })
  .then(res3 => {
    console.log(res3)
  })
【3】如果上一个.then返回了promise对象,我们可以继续通过.then来指定成功的回调函数,这样就解决了回调地狱的问题。

****************************************************************************************************************************************************************************

12、通过catch方法捕获错误...这不是就是java的语法吗
【1】在最后加catch打印,还挺好用的。
import thenFs from 'then-fs'
/*下列代码无法保证读取顺序*/
thenFs.readFile('./11.txt', 'utf8')
  .then(res1 => {
    console.log(res1)
    return thenFs.readFile('./2.txt', 'utf8')
  })
  .then(res2 => {
    console.log(res2)
    return thenFs.readFile('./3.txt', 'utf8')
  })
  .then(res3 => {
    console.log(res3)
  })
  .catch(err => {
    console.log(err)
  })

****************************************************************************************************************************************************************************

13、Promise的其他方法
【1】Promise.all() 等待机制
import thenFs from 'then-fs'

const promiseArray = [
  thenFs.readFile('./1.txt', 'utf-8'),
  thenFs.readFile('./2.txt', 'utf-8'),
  thenFs.readFile('./3.txt', 'utf-8')
]
Promise.all(promiseArray)
  .then(res => {
    console.log(res)
  })
Promise.all(promiseArray)
  .then(([res1, res2, res3]) => {
      console.log(res1, res2, res3)
    }
  )
【2】Promise.race()方法,赛跑机制,只要任何一个异步操作完成,立刻执行.then操作
import thenFs from 'then-fs'

const promiseArray = [
  thenFs.readFile('./1.txt', 'utf-8'),
  thenFs.readFile('./2.txt', 'utf-8'),
  thenFs.readFile('./3.txt', 'utf-8')
]
Promise.race(promiseArray)
  .then(res => {
    console.log(res)
  })
Promise.race(promiseArray)
  .then(([res1, res2, res3]) => {
      console.log(res1, res2, res3)
    }
  )

****************************************************************************************************************************************************************************

14、Promise封装读取文件的方法
【1】封装要求:方法名为getFile,方法形参接收一个fPath,返回值为Promise对象
import thenFs from 'then-fs'

function getFile(fPath) {
  return thenFs.readFile(fPath, 'utf-8')
}

export default {
  getFile
}
【2】使用这个方法
import getFile from './myExport.js'

getFile.getFile('./1.txt').then(res => {
  console.log(res)
})
【3】升级,怎么还没有我写的好呀!!!!!!!!!!!!!!!
import thenFs from 'then-fs'

function getFile(fPath) {
  return new Promise(function (resolve, reject) {
    thenFs.readFile(fPath, 'utf-8', (err, str) => {
      if (err) {
        return reject(err)
      } else {
        return resolve(str)
      }
    })
  })
}

export default {
  getFile
}
【4】这个好,可以知道异常
import getFile from './myExport.js'

getFile.getFile('./11.txt').then(res => {
  console.log(res)
}).catch(err => {
  console.log(err)
})

****************************************************************************************************************************************************************************

16、async和await概念
【1】是es8引入的新语法,是用来简化Promise操作的
【2】.then解决了回调地狱,但是代码仍然冗余,不易理解。
【3】async与await推出了。简单多了感觉。
import thenFs from 'then-fs'

/*function getFile() {
  let res = thenFs.readFile('./1.txt', 'utf-8')
  console.log(res)
}*/
async function getFile() {
  let res = await thenFs.readFile('./1.txt', 'utf-8')
  console.log(res)
  res = await thenFs.readFile('./2.txt', 'utf-8')
  console.log(res)
  res = await thenFs.readFile('./3.txt', 'utf-8')
  console.log(res)
}

getFile()

****************************************************************************************************************************************************************************

17、async和await使用注意点
【1】如果在方法中使用了await,则function必须被async(异步)修饰
【2】执行顺序示例。第一个await之前都是同步的,第一个await之后的都是异步的。
import thenFs from 'then-fs'

/*function getFile() {
  let res = thenFs.readFile('./1.txt', 'utf-8')
  console.log(res)
}*/
console.log('A')

async function getFile() {
  console.log('B')
  let res = await thenFs.readFile('./1.txt', 'utf-8')
  console.log(res)
  res = await thenFs.readFile('./2.txt', 'utf-8')
  console.log(res)
  res = await thenFs.readFile('./3.txt', 'utf-8')
  console.log(res)
  console.log('D')
}

getFile()
console.log('C')

****************************************************************************************************************************************************************************

18、EventLoop同步任务与异步任务
【1】js是单线程的语言,只能同时执行一个任务
***********************************************************************同步任务
是在主线程上排队执行的那些任务
***********************************************************************异步任务
又叫做耗时任务,是由js委托给宿主环境进行执行的任务。当任务执行完毕后通知js主线程执行回调函数

****************************************************************************************************************************************************************************

19、同步、异步任务执行的过程
【1】堆。主线程是在栈里执行的。栈里的主任务js执行,栈里的异步任务委托给宿主环境执行。
宿主环境包含浏览器或者Node.js。执行完成的异步任务给‘任务队列’。主线程执行完毕后,js主线程
会主动查找‘任务队列’。按照回调函数的顺序取出来,再去执行。js主线程会不断的循环工作。
【2】栈是运行方法的、堆是存储实体的(比如数组)。栈内存没有默认值,堆内存有默认值。都是存在内存里的。new 对象是放在堆里的,它不会随方法而消失。

****************************************************************************************************************************************************************************

20、EventLoop的概念
【1】js主线程不断去任务队列取任务的整个循环过程,就叫做EventLoop
import thenFs from 'then-fs'

console.log('A')
thenFs.readFile('./1.txt', 'utf-8').then(res => {
  console.log('B')
})
setTimeout(() => {
  console.log('C')
}, 0)
console.log('D')
***********************************************************************打印为ADCB
因为B与C C先执行完毕。所以先打印C

****************************************************************************************************************************************************************************

21、宏任务与微任务概念
【1】异步任务分为宏、微任务。
宏任务:ajax setTimeout setInterval 文件操作 其他
微任务:Promise.then .catch .finally 其他
【2】宏、微任务执行顺序。两者是交替执行的
宏任务执行完毕,会判断是否存在微任务,如果有先执行微任务完毕后再执行宏任务。

****************************************************************************************************************************************************************************

22、理解宏任务与微任务的执行顺序
【1】小云、小腾排队,假设只有一个业务,小云办理,小腾仅能等待。
小云存款(宏任务开始)后,柜员询问是否需要办理信用卡、购买理财产品,如果办理则微任务开始。
小云完毕后,小腾办理。

****************************************************************************************************************************************************************************

25、API接口案例
【1】MySQL数据库+Express(我java不能实现吗?)...
【2】npm i express@4.17.1 mysql@2.2.5
【3】创建express服务器
【4】创建db数据库,就是properties的配置信息
【5】创建user_control模块,执行sql语句
【6】使用user_router模块
【7】使用try...catch捕获程序执行中的异常

****************************************************************************************************************************************************************************

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/591428.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

基于SSM的校园短期闲置资源置换平台(有报告)。Javaee项目。ssm项目。

演示视频&#xff1a; 基于SSM的校园短期闲置资源置换平台&#xff08;有报告&#xff09;。Javaee项目。ssm项目。 项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三层体系结构&#xff0c;通过…

英语语法动词和动词的虚拟语气

动词 谓语动词的三大功能&#xff1a;时、态、气 1、时 和 态 的组合构成了英语的 16 种时态。 2、气 表示的是动作的情感和假设。

uboot-网络配置

文章目录 一、网络简介二、修改PHY芯片地址三、删除 uboot 中 74LV595 的驱动代码1.删除宏定义&#xff0c;添加ENET1和ENET2复位引脚&#xff0c;宏定义2.删除内容如下 四、添加 I.MX6U-ALPHA 开发板网络复位引脚驱动 一、网络简介 &#x1f4a6;I.MX6UL/ULL 内部有个以太网 …

perl:用 MIDI::Simple 生成midi文件,用 pygame 播放 mid文件

在 csdn.net 下载 strawberry-perl-5.32.1.1-64bit.zip 解压安装在 D:\Strawberry\ 运行 cpan install MIDI::Simple D:\Strawberry\c\bin\gmake.exe test -- OK Running make install for CONKLIN/MIDI-Perl-0.84.tar.gz Installing D:\Strawberry\perl\site\lib\MIDI.pm I…

算法打卡day40

今日任务&#xff1a; 1&#xff09;139.单词拆分 2&#xff09;多重背包理论基础&#xff08;卡码网56携带矿石资源&#xff09; 3&#xff09;背包问题总结 4&#xff09;复习day15 139单词拆分 题目链接&#xff1a;139. 单词拆分 - 力扣&#xff08;LeetCode&#xff09; …

【数据库原理及应用】期末复习汇总高校期末真题试卷

试卷 一、填空题 1.________是位于用户与操作系统之间的一层数据管理软件。 2.数据库系统的三级模式结构是指________、________、________。 3.数据库系统的三种数据模型是________ 、________、________。 4.若关系中的某一属性组的值能唯一地标识一个元组&#xff0c;则…

项目管理-项目进度管理3/3

项目管理&#xff1a;每天进步一点点~ 活到老&#xff0c;学到老 ヾ(◍∇◍)&#xff89;&#xff9e; 何时学习都不晚&#xff0c;加油 项目进度管理&#xff1a;需掌握 ITTO, 搞懂计算图&#xff0c;问题和解决方案。 项目进度管理6个过程&#xff0c;包括&#xff08;口…

Qt5.15.2安装Android开发环境。

下载Java 8&#xff0c;不要下Java 20 jdk8 安装跟着默认走就行&#xff1a;C:\Program Files\Java 需要将QtCreator的sdk_definitions.json文件修改一下 “cmdline-tools;latest” 修改为 “cmdline-tools;6.0” 在一个非中文路径&#xff0c;建立一个android-sdk-windows空…

MATLAB 微积分

MATLAB 微积分 MATLAB提供了多种方法来解决微分和积分问题&#xff0c;求解任意程度的微分方程式以及计算极限。最重要的是&#xff0c;您可以轻松求解复杂函数的图&#xff0c;并通过求解原始函数及其导数来检查图上的最大值&#xff0c;最小值和其他文具点。 本章将讨论微…

AD中如何器件带动导线一起旋转

选中器件和导线&#xff0c;右键点击联合&#xff0c;从选中的器件生成联合 点击屏幕右上角的小齿轮&#xff08;设置按钮&#xff09;&#xff0c;选择下图所示的旋转步进为45度&#xff08;或其他&#xff09;&#xff0c;器件拖拽设置为Connected Tracks 之后就可以按住空格…

从零开始搭建一个vue项目

从零开始搭建一个vue项目 一、环境准备 1.1 安装node.js 选择合适的LTS版本&#xff0c;然后下载安装&#xff0c;安装地址&#xff1a;https://nodejs.org/en/download 在命令行中查看已安装的node.js版本 node -v v14.14.01.2 切换为淘宝的镜像源 解决国内下载慢的问题,…

【数据结构(邓俊辉)学习笔记】向量06——位图

文章目录 0.概述1.结构2.实现3. 应用3.1 去重3.2 筛法 0.概述 位图&#xff08;Bitmap&#xff09;是一种特殊的序列结构&#xff0c;可用以动态地表示由一组&#xff08;无符号&#xff09;整数构成的集合。 test() 判断k 是否存在集合S中。set() 将k 加入到集合S中。clear…

免费APP分发平台 - 一个指南和解析

数字化时代的APP分发平台 随着数字化进程的加速免费APP分发平台 - 一个指南和解析&#xff0c;移动应用&#xff08;APP&#xff09;市场正迅速扩大。在这个充满竞争的市场中免费APP分发平台 - 一个指南和解析&#xff0c;一个优秀的APP分发平台能够帮助开发者和商家更有效地触…

【matlab基础知识】(三)二维曲线绘制plot

x[-pi:0.0001:pi]; 选择较小步距 ysin(tan(x))-tan(sin(x));plot(x,y) 条件和函数值做一个点乘 x[-2:0.02:2];y1.1*sign(x).*(abs(x)>1.1)x.*(abs(x)<1.1);plot(x,y) 颜色&#xff0c;线形&#xff0c;曲线上的标志 由于0.01cosx波动太小&#xff0c;所以plotyy绘制多…

蓝桥杯练习系统(算法训练)ALGO-949 勇士和地雷阵

资源限制 内存限制&#xff1a;256.0MB C/C时间限制&#xff1a;1.0s Java时间限制&#xff1a;3.0s Python时间限制&#xff1a;5.0s 问题描述 勇士们不小心进入了敌人的地雷阵&#xff08;用n行n列的矩阵表示&#xff0c;*表示某个位置埋有地雷&#xff0c;-表示某个…

可视化大屏C位图:智慧场馆/场所图

Hello&#xff0c;我是大千UI工场&#xff0c;本期可视化大屏的焦点图&#xff08;C位&#xff09;分享将场馆作为焦点图的情形&#xff0c;欢迎友友们关注、评论&#xff0c;如果有订单可私信。 智慧场馆是指通过物联网、大数据、人工智能等技术手段&#xff0c;将传统场馆与…

ctfshow crypto rsa部分题目简单题解

easyrsa1 下载点击打开附件 e 65537 n 1455925529734358105461406532259911790807347616464991065301847 c 69380371057914246192606760686152233225659503366319332065009 题目中给了e,n,c的值。 使用在线网址factordb.com 分解n得到p&#xff0c;q 编写脚本 import gm…

Java项目:基于SSM框架实现的在线医疗服务系统(ssm+B/S架构+源码+数据库+毕业论文+开题报告)

一、项目简介 本项目是一套基于SSM框架实现的在线医疗服务系统 包含&#xff1a;项目源码、数据库脚本等&#xff0c;该项目附带全部源码可作为毕设使用。 项目都经过严格调试&#xff0c;eclipse或者idea 确保可以运行&#xff01; 该系统功能完善、界面美观、操作简单、功能…

为什么 IP 地址通常以 192.168 开头?(精简版)

网络通讯的本质就是收发数据包。如果说收发数据包就跟收发快递一样。IP地址就类似于快递上填的收件地址和发件地址一样&#xff0c;路由器就充当快递员的角色&#xff0c;在这个纷繁复杂的网络世界里找到该由谁来接收这个数据包&#xff0c;所以说&#xff1a;IP地址就像快递里…

Java 获取 Outlook 邮箱的日历事件

Java 获取 Outlook 邮箱的日历事件 1.需求描述2.实现方案3.运行结果 IDE&#xff1a;IntelliJ IDEA 2022.3.3 JDK&#xff1a;1.8.0_351 Outlook&#xff1a;Microsoft Office 2016 1.需求描述 比如现在需要获取 Outlook 邮箱中四月的全部的会议安排&#xff0c;如下图所示 …
最新文章