-
首先說說兩者的概念
Promise
Promise 是異步編程的一種解決方案日矫,比傳統(tǒng)的解決方案——回調(diào)函數(shù)和事件——更合理和更強(qiáng)大赔退,簡(jiǎn)單地說清寇,Promise好比容器训堆,里面存放著一些未來才會(huì)執(zhí)行完畢(異步)的事件的結(jié)果,而這些結(jié)果一旦生成是無法改變的async await
async await也是異步編程的一種解決方案椒功,他遵循的是Generator 函數(shù)的語法糖捶箱,他擁有內(nèi)置執(zhí)行器,不需要額外的調(diào)用直接會(huì)自動(dòng)執(zhí)行并輸出結(jié)果动漾,它返回的是一個(gè)Promise對(duì)象丁屎。
兩者的主要用法、語法就不贅述了旱眯,感興趣的同學(xué)可以自行查閱 es6中文文檔
-
兩者的區(qū)別
Promise的出現(xiàn)解決了傳統(tǒng)callback函數(shù)導(dǎo)致的“地域回調(diào)”問題晨川,但它的語法導(dǎo)致了它向縱向發(fā)展行成了一個(gè)回調(diào)鏈,遇到復(fù)雜的業(yè)務(wù)場(chǎng)景删豺,這樣的語法顯然也是不美觀的共虑。而async await代碼看起來會(huì)簡(jiǎn)潔些,使得異步代碼看起來像同步代碼呀页,await的本質(zhì)是可以提供等同于”同步效果“的等待異步返回能力的語法糖妈拌,只有這一句代碼執(zhí)行完,才會(huì)執(zhí)行下一句蓬蝶。
async await與Promise一樣尘分,是非阻塞的。
async await是基于Promise實(shí)現(xiàn)的疾党,可以說是改良版的Promise音诫,它不能用于普通的回調(diào)函數(shù)惨奕。
簡(jiǎn)單來看雪位,這兩者除了語法糖不一樣外,他們解決的問題梨撞、達(dá)到的效果是大同小異的雹洗,我們可以在不同的應(yīng)用場(chǎng)景,根據(jù)自己的喜好來選擇使用卧波。