面经 | ES6

ES6

  • ES6
    • Promise对象
      • 创建Promise
      • 三个状态
      • resolve/reject 和微任务的关系
      • await
    • set vs weakSet
    • map vs weakMap

ES6

Promise对象

  • new Promise(excutor);excutor是一个函数,会立刻执行;
  • then里的回调函数,会进入微任务队列;then会返回一个的promise对象
  • await等到的是一定是一个已经resolved的Promise对象;
  • 掌握几个常见的api:.all .allSetteled .race
    • all 等待全部reslove,有一个为reject都会进入catch
    • allSetteled只要全部fullfiled了就可以进入then回调了
    • race取最先fullfiled的promise的结果

创建Promise

  • new Promise(excutor),excutor是一个函数,会立刻执行。可以接受两个入参resolve,reject。
  • Promise.resolve/reject()也会返回一个Promise对象
new Promise(()=>{})
new Promise((resolve)=>{})
new Promise((resolve,reject)=>{})
Promise.resolve();
Promise.reject();
  • 只写一个new Promise()会报错:Promise resolver undefined si not a funciton
  • new Promise((resolve)=>console.log(1))会立刻执行,输出1.

三个状态

pending resolve reject

// let p=new Promise() // 报错:Promise resolver undefined is not a function
let p1=new Promise(()=>{})
let p2=new Promise((resolve)=>{resolve("hi")})
let p3=new Promise((resolve,reject)=>{reject()})console.log(p1,p2,p3) 
// Promise {<pending>} Promise {<fulfilled>: 'hi'} Promise {<rejected>: undefined}

resolve/reject 和微任务的关系

new Promise((resolve,reject)=>{console.log(1);resolve(); // then中的回调会进入微任务队列;console.log(2) // resolve()只会让then进入队列,不会打断2的输出
}).then(res=>{ // then返回一个新的Promise对象console.log(3)
});
// 1 2 3
  • 假设没有resolve();then中的函数不会进入微任务队列,也就是不会输出。

await

难点在于,await fun,如果fun是一个Promise对象的情况;需要考虑一直取then的情况

async function a1(){ // return "hi"// return new Promise(()=>{})// return Promise.resolve();
}async function a2(){await a1();console.log(1);
}// main线程开始
a2();
Promise.resolve().then(()=>{console.log(2)
})
  • 首先思考一个问题,await是怎么实现等待的呢?
async function a2(){await a1(); // a1不是Promiseconsole.log(1);
}
// 实际等同于
async function a2(){a1().then(res=>{console.log(1);}}
}
  • 看懂上面的例子,就很好的理解了,为什么a1会立刻执行,然后1会进入微任务;
  • 假设res是一个Promise对象,也就是a1()是一个Promise对象会发生什么呢?
async function a2(){await a1();  // a1是Promise对象console.log(1);
}
// 实际等同于
async function a2(){a1().then(res=>{res.then(res2=>{console.log(1))}}
}
  • 假设a1()返回的是Promise对象,也就是res是一个Promise,那么就会继续then。
    • 注意,这里默认a1是用async标记的,假设a1没用async标记,即使a1返回的是promise对象,还是会被分解成这样,所以asynce标记a1的作用就是,不断得去取返回的值res,如果是promise,就接着嵌套,不断then,否则,只会then一次。
async function a2(){a1().then(res=>{console.log(1);}}
}

反正,复制下面例子,判断对了,就算理解对了

 async function a1(){ // 返回的是promise的时候,有无async会有什么区别?// return "hi"// return new Promise(()=>{})// return Promise.resolve();// return new Promise((resolve)=>{//     console.log(3)//     resolve()// })
}async function a2(){await a1();console.log(1);
}a2();
Promise.resolve().then(()=>{console.log(2)
})

在这里插入图片描述
打印p就好理解了,p是一个promise对象,状态为fulfilled;所以无论何时then,都能读到他的fulfilled值:‘hi’;
在这里插入图片描述
reject是一样的道理:
在这里插入图片描述

set vs weakSet

  • 都是集合,只不过weakSet里面只能存引用类型的变量。
  • weakSet相对set的好处就是,可以避免内存泄漏。weakSet里面存的引用,假设这个引用在外面被销毁了,那么weakSet里面的引用也会消失,就可以避免内存泄漏。
    • 内存泄漏:某块内存,程序不再使用,但还是没有被释放。

map vs weakMap

  • weak的表现和上面的一样,只不过之表现在key.key引用消失了,weakMap就删除键值对了.但是,value引用消失了,不影响.
  • map和weakMap的区别是key;weakMap只允许对象,其实也就是弱引用做为键.

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LeetCode 面试经典150题 137.只出现一次的数字II

题目&#xff1a; 给你一个整数数组 nums &#xff0c;除某个元素仅出现 一次 外&#xff0c;其余每个元素都恰出现 三次 。请你找出并返回那个只出现了一次的元素。 你必须设计并实现线性时间复杂度的算法且使用常数级空间来解决此问题。 思路&#xff1a; 方法一&#xf…

Java | Leetcode Java题解之第435题无重叠区间

题目&#xff1a; 题解&#xff1a; class Solution {public int eraseOverlapIntervals(int[][] intervals) {if (intervals.length 0) {return 0;}Arrays.sort(intervals, new Comparator<int[]>() {public int compare(int[] interval1, int[] interval2) {return i…

如何把python(.py或.ipynb)文件打包成可运行的.exe文件?

将 Python 程序打包成可执行的 .exe 文件&#xff0c;通常使用工具如 PyInstaller。这是一个常用的 Python 打包工具&#xff0c;可以将 Python 程序打包成独立的可执行文件&#xff0c;即使没有安装 Python 也能运行。 步骤&#xff1a; 1. 安装 PyInstaller 使用 conda 安…

风力发电机叶片表面缺陷识别检测数据集yolo数据集 共7000张

风力发电机叶片表面缺陷识别检测数据集yolo数据集 共7000张 风力发电机叶片表面缺陷识别数据集&#xff08;Wind Turbine Blade Defects Recognition Dataset, WTBDRD&#xff09; 摘要 WTBDRD 是一个专门为风力发电机叶片表面缺陷识别而设计的数据集&#xff0c;旨在为相关领…

HttpServletRequest简介

HttpServletRequest是什么&#xff1f; HttpServletRequest是一个接口&#xff0c;其父接口是ServletRequest&#xff1b;HttpServletRequest是Tomcat将请求报文转换封装而来的对象&#xff0c;在Tomcat调用service方法时传入&#xff1b;HttpServletRequest代表客户端发来的请…

HTML5好看的水果蔬菜在线商城网站源码系列模板2

文章目录 1.设计来源1.1 主界面1.2 商品列表界面1.3 商品详情界面1.4 其他界面效果 2.效果和源码2.1 动态效果2.2 源代码 源码下载 作者&#xff1a;xcLeigh 文章地址&#xff1a;https://blog.csdn.net/weixin_43151418/article/details/142059220 HTML5好看的水果蔬菜在线商城…

FortiGate OSPF动态路由协议配置

1.目的 本文档针对 FortiGate 的 OSPF 动态路由协议说明。OSPF 路由协议是一种 典型的链路状态(Link-state)的路由协议,一般用于同一个路由域内。在这里,路由 域是指一个自治系统,即 AS,它是指一组通过统一的路由政策或路由协议互相交 换路由信息的网络。在这个 AS 中,所有的 …

OTTO奥托机器人开发总结

OTTO机器人是一个开源外壳&#xff0c;硬件和软件的桌面机器人项目&#xff0c;非常适合新手研究和拓展。 我一直希望找一个合适的项目入手研究机器人&#xff0c;这种项目最好是软硬件都开源的&#xff0c;可以随着自己的想法无限的扩展和私人订制&#xff0c;做为初学者&…

Vue3:element-plus el-Table列表合计处理显示字符串类型/计算合计数值

需求整理 1.使用element组件库中的 el-table组件实现图上 底部当前页合计的功能。在一般的情况下&#xff0c;只需要计算数值部分的值&#xff0c;因为组件中的方法中处理的就是将值的类型转换成数值类型&#xff0c;像string类型的字符串的话&#xff0c;在进行转换的时候会出…

计算机毕业设计电影票购买网站 在线选票选座 场次订票统计 新闻留言搜索/springboot/javaWEB/J2EE/MYSQL数据库/vue前后分离小程序

系统功能 ‌在线选票选座‌&#xff1a;用户可浏览电影场次&#xff0c;选择座位并生成订单。‌场次订票统计‌&#xff1a;系统实时统计各场次订票情况&#xff0c;便于影院管理。‌新闻发布与留言‌&#xff1a;发布最新电影资讯&#xff0c;用户可留言互动。‌搜索功能‌&a…

springboot整合nacos

docker安装nacos参考docker安装各个组件的命令 一、目录结构 二、引入必要依赖 <!-- nacos服务注册与发现 --><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>…

接口加解密及数据加解密

目录 一、 加解密方式介绍 1.1 Hash算法加密 1.2. 对称加密 1.3 非对称加密 二、 我们要讲什么&#xff1f; 三、 接口加解密 四、 数据加解密 一、 加解密方式介绍 所有的加密方式我们可以分为三类&#xff1a;对称加密、非对称加密、Hash算法加密。 算法内部的具体实现…

数集相等定义凸显“R各元x的对应x+1的全体=R”是几百年重大错误

黄小宁 变量x所取各数也均由x代表&#xff0c;x代表其变域&#xff08;x所有能取的数组成的集&#xff09;内任一元。设集A&#xff5b;x&#xff5d;表A各元均由x代表&#xff0c;&#xff5b;x&#xff5d;中变量x的变域是A。其余类推。因各数x可是数轴上点的坐标所以x∈R变换…

Unity进阶之C#知识补充

概述 Unity跨平台的基本原理 了解.Net相关知识 Unity跨平台的基本原理&#xff08;Mono&#xff09; Unity跨平台的基本原理&#xff08;IL2CPP&#xff09; IL2CPP 模式可能存在的问题处理 报错的话就去下载 用到的测试类 C#版本和Unity的关系 C#各版本新功能和语法 C# 1~4 功…

怎样写论文及论文格式?分享4款ai论文生成软件

撰写一篇学术论文是一项复杂而系统的工作&#xff0c;需要从选题、文献综述、研究方法到最终的写作和修改等多个步骤。本文将详细介绍如何写好一篇论文&#xff0c;并推荐四款AI论文生成软件&#xff0c;特别是千笔-AIPassPaper。 如何写好一篇论文 1. 选题与题目表达 选题是…

消息中间件常见面试题(RabbitMQ)

MQ场景&#xff1a; 异步发送&#xff08;验证码、短信、邮件&#xff09;MySQL、Redis、ES之间的数据同步分布式事务等 一、RabbitMQ 1.1 消息不丢失 提问&#xff1a;如果保证消息不丢失呢&#xff1f; 流程&#xff1a;生产者将消息发送给交换机&#xff0c;交换机发送给…

FortiWLC 控制器系统恢复操作介绍

简介 对于 FortiWLC 控制器在有些实际操作过程中,会由于某些原因导致升级失败, 无法升级,或是系统文件错乱等情况, 对于这些问题,我们可以通过重新恢复控制 器系统来解决这些问题. 本文详细说明恢复控制器系统的操作步骤. 注意: 本操作需要通过串口登录到控制器设备上,另外在控…

Kubernetes 深入浅出系列 | 容器剖析之容器基本实现原理

一、容器基本实现原理 Docker 主要通过如下三个方面来实现容器化&#xff1a; ① 使用操作系统的 namespace 隔离系统资源技术&#xff0c;通过隔离 网络、PID 进程、系统信号量、文件系统挂载、主机名和域名&#xff0c;来实现在同一宿主机系统中&#xff0c;运行不同的容器&…

Linux之我不会

一、常用命令 1.系统管理 1.1 systemctl start | stop | restart | status 服务名 案例实操 1 查看防火墙状态 systemctl status firewalld2 停止防火墙服务 systemctl stop firewalld3 启动防火墙服务 systemctl start firewalld4 重启防火墙服务 systemctl restart f…

uni-app进度条

<template><view><canvas canvas-id"ring" id"ring" style"width: 200px; height: 180px;"><!-- <p>抱歉&#xff0c;您的浏览器不支持canvas</p> --></canvas></view> </template><…