一文搞懂 Promise、Genarator、 Async 三者的区别和联系

非985/211大学毕业,软件工程专业,前端,坐标:北京

工作三年多,第一家人数 30 多人的创业公司,1 年多。

第二家属于前端技术不错的公司,2 年多。

01

我是一个喜欢在技术领域“折腾”的人,技术能力勉强合格,随着工作经验的积累,逐渐从一个“填坑”的锻炼为可以负责复杂的前端项目。

本想着可以在“金九银十”的时候跳槽成功的,没想到直到年末才拿到自己想要的大厂offer,也算是功夫不负有心人吧,一轮轮面试下来,也是深深感受到了高级前端的面试套路,今天我们一起来探讨一下。

 

跳槽目标:

虽然,我迫切想要换工作,但是也明白裸辞是不明智的,所以“骑驴找马”成为找工作的方式,对于想要换一份怎样的工作,综合考虑以后,我觉得自己的核心诉求是:

  • 技术沉淀

  • 视野+平台

 

所以,初创公司便不考虑在自己的范围之内了,我当然也是很想进入互联网大厂了,奈何明白自己还是有差距的,但不试试怎么知道自己究竟差在哪里呢?找到差距,才能快速提升,对吧?

 

面试的公司:

阿里、网易、滴滴、百度、字节、饿了么、携程、喜马拉雅

 

有的结果不理想,但是也算是是检测了一下自己,查缺补漏,以此督促自己加强学习。

02

具体面试题

这道面试题是你去任何一家大厂面试几乎都会被问到的问题。如果这道题答不好,那么最后的结果很有可能是凉凉:

请你分析一下,promise,generator,async 三者之间的关系?

下面有个计时器任务,请用这三种方法依次解决它代码中出现回调地狱的问题。

let t = setTimeout(()=>{ console.log(1111)    let t1 = setTimeout(()=>{        console.log(2222)        let t2 = setTimeout(()=>{            console.log(3333)        },3000)    },2000)},1000)

答案奉上~

promise

promise 是一个类函数。当它执行完毕后,会开启异步任务,这个异步任务还得看 promise 本身的状态。通俗来说,它的异步任务就是 then 中的回调函数。

那么问题来了。promise 诞生的目的不是为了开启异步任务,而是为了解决异步代码的书写格式,尽量实现函数回调的扁平化,所以我们需要把异步代码写在 promise 中进行封装。

const fnasync = function(value){    return new Promise(function(resolve,reject){        setTimeout(()=>{            console.log(value)            resolve()        })    })}fnasync(1111, 1000).then(() => {  return fnasync(2222, 2000)}).then(() => {  return fnasync(3333, 3000)}).catch(err => {console.log(err})

async

async 可以算是异步解决的终结者。虽然 promise 效果出来了,但还是会给开发者们带来逻辑上的问题。相反,async 的书写格式简单明了。

let asyncfn = function (num,timecount) {    return new Promise((resolve,reject)=>{        setTimeout(function(){            console.log(num)            resolve();        },timecount)    })}let fn = async function(){    await asyncfn(1111,1000)    await asyncfn(2222,1000)    await asyncfn(3333,1000)}fn()

我们只需要关注 await 后面跟的内容就 ok 了。

它们的联系

对于这三者之间的联系,其实很好理解。我们可以认为它们是每一次版本升级的产物。

也就是说,generator 其实是 promise 的升级版,但它的逻辑和理解却要比 promise 复杂。因此,程序员们在上面要花费一些学习成本,所以我个人不推荐大家使用generator。

而 async 是 generator 的升级版,外界都称它为 generator 的语法糖,那就意味着 async 就是一个小甜点,人人喜欢,因为它简单易懂还好用,顺理成章成为开发者们解决异步方案的不二之选!

03

其实,对于我们这些 1-3 年工作经历的前端,如何才能在面试时中脱颖而出呢?

踏实的基本功,加上丰富的实战经验,技术栈也不要给自己设限,React、Vue,、客户端开发、Node、Canvas ... 撸起袖子就是干,同时对于目前紧迫的业务涉及的技术也需要深入了解,看学习视频,多多投资自己。

因此,对于开发人员来说,技术一定得跟业务并进,那么怎样提升呢?

说到这,我真诚的给你推荐拉勾教育的课程了,大家知道,拉勾深耕招聘领域多年,在“人岗匹配”的过程中,发现很多人才的知识能力体系与企业的用人需求存在偏差。为了解决这个问题,拉勾教育团队历经 12 个月的精心打磨,推出《大前端高薪训练营》

 

 

现在扫码,即可免费获取 Web 前端资料

(涵盖技能图谱+源码+面试题+学习资料)

为什么要推荐《大前端高薪训练营》?

 

真内推·真就业

大家应该了解,拉勾深耕互联网招聘多年,打通了「人才培养+人才输送 的闭环」,学完后,直接帮你内推到对口的大公司,相当于为企业定向招聘,从学习到就业一条龙服务,帮助互联网人快速成长,实现升职加薪。


 

目前,拉勾教育毕业学员 成实现涨薪,最高涨幅达215%,就业企业不乏阿里巴巴、 腾讯、百度、字节跳动、美团、京东等明星企业.

 

真实战·真项目

拉勾教育的《大前端高薪训练营》课程设计对标阿里 P7,覆盖主流前端技术知识,真正从市场需求、商业价值角度出发进行研发,掌握“大厂”最新的开发技能:


权威商业实战项目剖析,带你深入到大型互联网项目实战中,涵盖了当下最火热的项目:在线教育、电商门户、B端系统。

针对常见业务和技术问题,拉勾提供了全套解决方案,帮你轻松应对技术难题。

真保障·真服务

拉勾是一个互联网招聘平台,所以,拉勾网和各大互联网企业,都有深入的合作关系。目前的企业资源,是 98 万+。

 

课程仅仅是开始,接下来还会帮你优化简历,模拟面试,最后内推到大厂,做到真正的一条龙服务!

免费送大厂资料,手慢无!

我们整理了一个【Web 前端资料】大礼包,对于想了解行业情况的,免费赠送!

 

现在扫码,即可免费获取 Web 前端资料

(涵盖技能图谱+源码+面试题+学习资料)

常见问题

 

什么样的基础适合学习这门课程?

  1. 技术基础薄弱:只懂应用,不懂底层原理,知其然并不知其所以然,一旦遇到复杂问题就无从下手

  2. 自我提升困难:无法建立整体的知识体系,缺少系统化的学习和提升,短期无法提高

  3. 项目经验单一:长期从事技术重复工作,对高阶技能等缺乏实战经验,职业发展受限制

  4. 进大厂无通道:现有的能力和经验不足以受到大厂的青睐,也没有猎头愿意帮忙内推到大厂

 

拉勾教育《大前端高薪训练营》区别于其他平台的优势?

  1. 覆盖 200+ 主流技术点,提供晋升阿里 P7 的完整路径,体系化夯实技术实力;

  2. 100% 还原多个公司的真前端项目,快速积累 Web、小程序、App 等反客户端领域实战经验;

  3. 夯实语言底层基础,8 大阶段逐步打造前端核心竞争力,告别野路子;

  4. 提供 20+ 商业级前端技术解决方案,轻松应对更多更难的业务问题,学来即用;

  5. 直击面试重点难点,优秀学员可享每月大厂内推机会。

 

 

点击“阅读原文”即可参与

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

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

相关文章

闭包,sync使用细节

代码 先看代码如下&#xff1a; func main() {var a []intfor i : 0; i < 100; i {go func() {a append(a, i)}()}time.Sleep(2 * time.Second)fmt.Println(a) } 这段测试代码是想要一个元素为0到100的切片&#xff0c;但是这一小段代码隐藏了很多的问题。 闭包函数 先看这…

dynamic 仪表板_仪表板完成百万美元交易

dynamic 仪表板问题 (The Problem) Anybody dealing with tech products and data-focused services runs into the same fundamental problem: what you do is technical but non-technical people control the budget. In other words:任何处理高科技产品和以数据为中心的服务…

checkStyle -- 代码风格一致

download page: http://sourceforge.net/project/showfiles.php?group_id80344&package_id107587 转载于:https://www.cnblogs.com/xuqiang/archive/2010/10/26/1953431.html

在线VS Code阅读源码神器 github1s

大家好&#xff0c;我是若川。github1s大部分人知道了&#xff0c;但还是有一部分不知道。我在掘金发过沸点和知乎发过想法还是有挺多人不知道&#xff0c;所以再发公众号推荐下。点击下方卡片关注我、加个星标。学习源码整体架构系列、年度总结、JS基础系列近日&#xff0c;一…

lenze变频器怎么更改地址_英威腾变频器GD300维修

英威腾变频器GD300维修英威腾变频器GD300维修41. 问题&#xff1a;变频器跟PLC采用485通讯不上答&#xff1a;1.检查变频器的通讯地址是否正确&#xff0c;如果采用通讯启动&#xff0c;检查P0.01是否为1&#xff0c;如果通过通讯设定频率&#xff0c;检查P0.068&#xff0c;P0…

代码设计的基础原则_设计原则:良好设计的基础

代码设计的基础原则As designers, it’s our goal to pass information in the most pleasing way possible. Starting out, there’s a wealth of literature to read and videos to watch that can get quite overwhelming to take in at a glance. People take different ro…

SQL根据细粒度为天的查询

当我们集成了一些前端框架&#xff0c;在某些展示页面上往往具有某些查询条件。而这其中日期查询的处理又较为麻烦&#xff0c;此处&#xff0c;我罗列了一种当前台上传了一种默认的date格式的日期查询数据至后台未经Controller或Service层处理直接在SQL中处理的一种方式——即…

企业生产经营相关英文及缩写之(11)--Genenic 普通书写

Genenic 普通书写 ASAP As soon as possible 尽早 BCC Blink Carbon Copy 无信头抄送&#xff0c;无信头副本 BR Best Regards 最诚致的问候 BTW By the way 顺便问一下 CC Carbon Copy …

java金额类型_Java中存储金额用什么数据类型?

很早之前, 记得一次面试, 面试官问存储金钱用什么数据类型? 当时只知道8种数据类型(boolean, byte, short, int, long, float, double, char)的我, 回答了double, 因为我觉得double是双精度类型, 最适合, 但是面试官告诉我应该用BigDecimal! 最近在做支付的项目, 才对这种数据…

信息技术与信息革命

信息资源管理学什么 围绕 信息这份战略资源&#xff0c;从信息资源的管理角度出发&#xff0c;以信息系统为主要研究对象&#xff0c; 研讨了信息系统规划&#xff0c;信息系统开发 信息系统的内容&#xff0c;信息系统安全以及信息资源管理中 涉及的法律法规 知识框架 信息技术…

React Hooks 不知道怎么学?看这篇

大家好&#xff0c;我是若川。最近跟朋友聊技术&#xff0c;发现越来越多的大厂&#xff0c;都优先考虑用 React 做项目&#xff0c;在面试中也经常会考察对 React Hooks 的理解。其实&#xff0c;我一直觉得&#xff0c;React 才是前端的正确打开方式。当然&#xff0c;并不是…

数字与企鹅的战争,看周红衣的高明之处

本文非原创&#xff0c;转自月光    360与QQ最近的一轮大战已经接近尾声&#xff0c;毫无疑问的是&#xff0c;360在这一轮对决中以胜利告终。这场战争持续了整整一个月零两天&#xff0c;先后经历了几次小小的高潮&#xff0c;最终周鸿祎祭出绝招&#xff0c;秒杀群雄&#…

ui原型设计工具_UI设计师的工具包,用于专业模型,原型和产品插图

ui原型设计工具This is a followup to my previous article 这是我上一篇文章的后续 visual tools for UX Designers视觉工具Tools don’t make designs better– you do! It doesn’t matter if you paid a lot of money for the latest software, or if you simply have a p…

java wsdl xfire_java调用wsdl xfire和cxf两种方式

xfire 如下&#xff1a;String spID "";String password "";String accessCode "";String content "";String mobileString "";String url "";String operateName "Submit";Object[] object newObject…

请求与响应

HTTP 请求与响应 HTTP 请求的组成的四部分&#xff1a; 1 动词 路径 协议/版本2 Key1: value12 Key2: value22 Key3: value32 Content-Type: application/x-www-form-urlencoded2 Host: www.baidu.com2 User-Agent: curl/7.54.034 要上传的数据 关于以上各部分内容的碎碎念&…

前端 Offer 提速:如何写出有亮点的简历

大家好&#xff0c;我是若川。今天推荐一篇8年工作经验字节大佬的文章&#xff0c;如何写出有亮点的简历。可以收藏常看。点击下方卡片关注我、加个星标。学习源码整体架构系列、年度总结、JS基础系列先来个灵魂拷问&#xff1a;「你与他人相比&#xff0c;有什么能形成明显区分…

2008中的membership profile操作(转)

<profile > <properties> <add name"jimmy" /> </< span>properties> </< span>profile> 然后就那么简单,后台就能通过Profile拿到: Profile.jimmy "Pumpkin Ravioli"; 然后~通过这种方式就跟Session一样&a…

css网格_一个CSS网格可以全部统治

css网格The case for using one CSS grid for your entire website在整个网站上使用一个CSS网格的情况 CSS网格与Flexbox (CSS Grid vs Flexbox) In the dark ages, we used table, a few years ago we used float and before today most of us used flex . Of course, these …

java 高级泛型_Java 泛型高级

1、限制泛型可用类型在定义泛型类别时&#xff0c;预设可以使用任何的类型来实例化泛型中的类型&#xff0c;但是如果想要限制使用泛型的类别时&#xff0c;只能用某个特定类型或者其子类型才能实例化该类型时&#xff0c;使用extends关键字指定这个类型必须是继承某个类&#…

做Web前端开发的你必须会这几点!

1、Web开发分类与区别 人们通常将Web分为前端和后端&#xff0c;前端相关的职位有前端设计师(UI/UE)&#xff0c;前端开发工程师&#xff0c;后端相关的有后端开发工程师。 2、技术栈区别 看各大招聘网站上&#xff0c;公司对前端开发工程师的要求莫过于精通HTML&#xff0c;CS…