一文搞懂 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 前端資料

(涵蓋技能圖譜+源碼+面試題+學習資料)

為什么要推薦《大前端高薪訓練營》?

?

真內推·真就業

大家應該了解,拉勾深耕互聯網招聘多年,打通了「人才培養+人才輸送 的閉環」,學完后,直接幫你內推到對口的大公司,相當于為企業定向招聘,從學習到就業一條龍服務,幫助互聯網人快速成長,實現升職加薪。


?

目前,拉勾教育畢業學員?9?成實現漲薪,最高漲幅達215%,就業企業不乏阿里巴巴、 騰訊、百度、字節跳動、美團、京東等明星企業.

?

真實戰·真項目

拉勾教育的《大前端高薪訓練營》課程設計對標阿里 P7,覆蓋主流前端技術知識,真正從市場需求、商業價值角度出發進行研發,掌握“大廠”最新的開發技能:


權威商業實戰項目剖析,帶你深入到大型互聯網項目實戰中,涵蓋了當下最火熱的項目:在線教育、電商門戶、B端系統。

針對常見業務和技術問題,拉勾提供了全套解決方案,幫你輕松應對技術難題。

真保障·真服務

拉勾是一個互聯網招聘平臺,所以,拉勾網和各大互聯網企業,都有深入的合作關系。目前的企業資源,是 98 萬+。

?

課程僅僅是開始,接下來還會幫你優化簡歷,模擬面試,最后內推到大廠,做到真正的一條龍服務!

免費送大廠資料,手慢無!

我們整理了一個【Web 前端資料】大禮包,對于想了解行業情況的,免費贈送!

?

現在掃碼,即可免費獲取?Web 前端資料

(涵蓋技能圖譜+源碼+面試題+學習資料)

常見問題

?

什么樣的基礎適合學習這門課程?

  1. 技術基礎薄弱:只懂應用,不懂底層原理,知其然并不知其所以然,一旦遇到復雜問題就無從下手

  2. 自我提升困難:無法建立整體的知識體系,缺少系統化的學習和提升,短期無法提高

  3. 項目經驗單一:長期從事技術重復工作,對高階技能等缺乏實戰經驗,職業發展受限制

  4. 進大廠無通道:現有的能力和經驗不足以受到大廠的青睞,也沒有獵頭愿意幫忙內推到大廠

?

拉勾教育《大前端高薪訓練營》區別于其他平臺的優勢?

  1. 覆蓋 200+ 主流技術點,提供晉升阿里 P7 的完整路徑,體系化夯實技術實力;

  2. 100% 還原多個公司的真前端項目,快速積累 Web、小程序、App 等反客戶端領域實戰經驗;

  3. 夯實語言底層基礎,8 大階段逐步打造前端核心競爭力,告別野路子;

  4. 提供 20+ 商業級前端技術解決方案,輕松應對更多更難的業務問題,學來即用;

  5. 直擊面試重點難點,優秀學員可享每月大廠內推機會。

?

?

點擊“閱讀原文”即可參與

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/275840.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/275840.shtml
英文地址,請注明出處:http://en.pswp.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…