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

在面试的过程中如果不了解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面试—倚天屠龙》感谢大家的阅读
    如碰到其他的问题 可以私下我 一起探讨学习
    如果对你有所帮助还请 点赞 收藏谢谢~!
    关注收藏博客 作者会持续更新…
评论 25
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

下一站丶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值