promise、async事件循环机制,你是CV工程师?

news/2024/11/23 13:36:02/

在面试的过程中如果不了解promise、async事件循环机制基本就会认为你是CV工程师

首先分析 async/await 其实是基于promise实现的,async 函数其实就是把 promise 做了一个包装
promise 是es6的语法,async/await 是es7的语法糖,所以我们先来分析一下 事件循环机制

事件循环机制

1.事件循环机制是为解决单线程代码执行不阻塞主进程一种机制,也就是我们所说的异步原理
2.因为JavaScript是单线程,事件循环机制是为了解决单线程阻塞、从上往下执行。执行完毕 => 判断是否微任务 => 判断是否有宏任务
3.整体的script(作为第一个宏任务)开始执行的时候,会把所有代码分为两部分:“同步任务”、“异步任务”;

  • 宏任务
    setInterval()
    setTimeout()
  • 微任务
    new Promise()后的.then与.catch函数
    async/await

1.promise里的then才会被加入微任务,他的resolve,是同步里的。
2.而async函数里遇到await之前的代码是同步里的,遇到await时,会执行await后面的函数,然后返回一个promise,把await下面的代码放入微任务,并且退出这个async函数。

-通俗易懂:

同步:一件事做完了才到另一件事(如果上一件事情没做完,就会一直卡在这里所以造成了阻塞)
异步:在做一件事请,这件事还没做完就开始做另一件事(互不影响,可以一起做事情)

promise

  • Promise,简单说就是一个容器,在里面进行处理出结果(成功或失败)。

  • Promise 一共有三种状态

    1.pending 初始状态

    2.fulfilled 成功状态

    3.rejected 失败状态

new Promise((resolve,reject) => {.then((data) => {               //接收传输成功的数据console.log(data);    }).catch((err) => {               //接收请求失败的数据console.log(err);         }).finally((all) => {            // 无论成功失败都会执行console.log(all);})
  • Promise.resolve
    将传递给它的参数填充 Fulfilled 到 Promise 对象后并返回这个 Promise 对象。

  • Promise.reject
    它的功能是调用该 Promise对象通过then指定的 onRejected函数,并讲错误(Error)对象传递给这个onRejected函数

  • Promise.then
    异步调用方式

  • Promise.all
    1.如果所有的Promise中有一个错误,走的是Promise.all().catch()这个。但是不影响其他 Promise 还是会正常执行,但不会返回结果
    2.特性:接受一个promise 对象的数组作为参数,同时开始、并行执行的,可以执行多个

  • Promise.allSettled
    1.Promise.allSettled()在你需要执行平行和独立的异步操作并收集所有结果时非常有效, 即使某些异步操作可能失败。
    2.特性:接受一个promise 对象的数组作为参数、同时开始、并行执行的,可以执行多个、但不会走catch

  • Promise.rece
    1.特性:接受一个promise 对象的数组作为参数、同时开始、并行执行的,可以执行多个、

这里我们重点理一下 Promise.rece 和 Promise.all() 的区别

  • Promise.all获得的成功结果的数组里面的数据顺序和Promise.all接收到的数组顺序是一致的
  • Promse.race是里面哪个结果获得的快,就返回那个结果,不管结果本身是成功状态还是失败状态。

亿点小知识:Promise本身是同步执行,.then是异步执行的

async / await

  • async/await 其实是基于promise实现的,async 函数其实就是把 promise 做了一个包装
    为什么那么说呢 我们看一下代码

async function Methods(){return "内容值"
}
/*
async 自动包装成Promise对象,等于
function Methods(){return new Promise((resolve) => {resolve("内容值")})
}
*/

总结:

共同点:两者都是处理异步请求的方式
不同点:

  • promise是返回的对象要用then().catch()去处理数据和捕获异常,而且书写方式是链式的,容易造成代码多层堆叠难以维护;
  • async await 则是通过try{}.cathc{}进行捕获直接抛出异常
    在这里插入图片描述
    以上就是《web面试—倚天屠龙》感谢大家的阅读
    如碰到其他的问题 可以私下我 一起探讨学习
    如果对你有所帮助还请 点赞 收藏谢谢~!
    关注收藏博客 作者会持续更新…

http://www.ppmy.cn/news/278364.html

相关文章

笔记本电脑无法充电

1、电脑电池拆下,释放静电,5分钟后再重新安装上去。 2、电池维护: 1、点击“开始”-“控制面板”,打开控制面板。 2、点击“电源选项”菜单。 3、点击“更改计划设置”菜单。 4、继续点击“更改高级电源设置”选项。 5、点击电池…

笔记本电池只能充电到95%-99%之间无法充至100%的原因和处理方案

故障现象: 笔记本在使用过程中经常出现电池无法充满至100%的情况,一般是大于95%就会出现不充电的情况,如下图: 原因分析: 这个是由于电池的自我保护功能所致,因为电池的使用寿命和充放电次数以及电池的饱和程度有关,…

笔记本充不进电 Linux,华硕笔记本电池充不进电

以搭载windows10系统的华硕UQ7200笔记本电脑为例,充不进电有可能是软件原因所致,华硕电脑通常会自带电源管理软件,若启用了电池保护模式,当识别到电源异常时便会自动禁止电池充电及放电,导致电池充不进电。其次若电池本…

小米笔记本电池只充电到95%的设置

仅作为记录,大佬请跳过。 文章目录 背景操作参考 背景 博主今天发现自己的小米笔记本,电池充电只到95%: 经查阅百度发现,电池充电只到95%是每个win10系统都可以设置的,为了保护电池 操作 1、打开控制面板——搜索电…

笔记本充电

笔记本充电 一 、LapTop类二、AcPower类三、Battery类四、Power类五、TestLapTop类六、效果展示 题目要求 一 、LapTop类 package lapTop;public class LapTop {public void charge() {System.out.println("供电中");}}二、AcPower类 package lapTop;public class …

小米笔记本充电实测追求速度牺牲兼容性小米笔记本充电驱动_是海尔?也是雷神?不足1千克MixBook Air超轻薄笔记本...

不足1千克的笔记本电脑,往往是别人的孩纸,咱们国产没寻着呀!即便是轻巧如小米笔记本Air 12.5英寸的版本,也是达到了1.02千克。而刚刚登场的雷神MixBook Air i5版本,则是控制到了930克的轻巧。还甭提,这可是…

联想笔记本电源管理-设置充电上下限

背景:2019年新买了联想小新,好奇笔记本电脑一直插着电源是否对电池有影响。 分析:知乎这篇讲的很好1,电源寿命和充电次数没有关系,和累积充电次数有关系,例如从50%充到100%只能算全循环半次。另外&#xff…

笔记本计算机充不上电,笔记本不充电了怎么办?笔记本电脑充不进电的解决方法...

笔记本因为小巧轻盈,移动方便得到了广泛的使用,特别是学生跟办公会议记录的就很适合。笔记本有一个优点也恰恰是缺点就是要充电,小编有一朋友遇到了笔记本电脑无法充电,可把她急坏了。相信广大网友也都有遇到这种情况吧&#xff0…