1.了解vue和react嗎?介紹一下。
vue和react都是主流的框架。
vue : 腳手架vue-cli、路由vue-router、狀態(tài)管理工具vue-vuex。
react : 腳手架react-cli、路由react-router、狀態(tài)管理工具react-redux。
二者區(qū)別:
1、生命周期不同。
2、模板和JSX。寫(xiě)法不同,react:HTML 語(yǔ)言直接寫(xiě)在 JavaScript 語(yǔ)言之中,不加任何引號(hào),這就是 JSX 的語(yǔ)法,它允許 HTML 與 JavaScript 的混寫(xiě);Vue.js 使用了基于 HTML 的模版語(yǔ)法。
3、狀態(tài)管理機(jī)制不同。vuex redux
2.說(shuō)一下vue動(dòng)態(tài)路由。
而能傳遞參數(shù)的路由模式,由于可以傳遞參數(shù),所以其對(duì)應(yīng)的路由數(shù)量是不確定的,故稱(chēng)之為 動(dòng)態(tài)路由。那么動(dòng)態(tài)路由如何傳遞參數(shù)?
路由傳參: path: '/detail/:id',
<router-link?:to ="{params :{id:1}}"?>? ? ? ? ? ? <div>首頁(yè)</div>? ? ? ? ? </router-link>
如何把參數(shù)讀取出來(lái)?路由參數(shù)是被設(shè)置到 this.$route.params 中的,想取到這個(gè)值,用?this.$route.params.id?就可以了。
3.vue雙向綁定,以及原理。 (vue的響應(yīng)式原理)
v-model : Object.defineProperty()
它可以允許我們對(duì)象設(shè)定getter、setter、從而可以劫持用戶(hù)對(duì)對(duì)象屬性的取值和賦值。
4.了解vuex嗎?詳細(xì)描述下。
它是vue的狀態(tài)管理工具。
state:存儲(chǔ)數(shù)據(jù)的狀態(tài)
mutation: 存儲(chǔ)數(shù)據(jù)狀態(tài)的同步方法
action: 存儲(chǔ)數(shù)據(jù)的異步方法
module: 模塊的管理
5.vue store 的特點(diǎn)。
store存儲(chǔ)的數(shù)據(jù)和方法是全局的,在任一組件和頁(yè)面中都能調(diào)用。
6.你了解的vue指令有哪些?
v-model :雙向綁定
v-bind:單向綁定
v-on: 時(shí)間綁定 可以縮寫(xiě)為@
v-show :顯示隱藏
v-if :條件渲染
v-for :遍歷(列表渲染)
7.vue生命周期
Vue 實(shí)例從創(chuàng)建到銷(xiāo)毀的過(guò)程,就是生命周期。
也就是從開(kāi)始創(chuàng)建、初始化數(shù)據(jù)、編譯模板、掛載DOM-渲染、更新-渲染、卸載等一系列的過(guò)程,我們稱(chēng)這是 Vue 的生命周期。
beforeCreate , created , beforeMount ,mounted ,beforeUpdate,updated,activated,deactivated,beforeDestroy,destroyed
8.MVVM框架是什么?
MVVM是Model-View-ViewModel的縮寫(xiě)
Model代表數(shù)據(jù)模型,負(fù)責(zé)業(yè)務(wù)邏輯和數(shù)據(jù)封裝
View代表UI組件,負(fù)責(zé)界面和顯示
ViewModel監(jiān)聽(tīng)模型數(shù)據(jù)的改變和控制視圖行為,處理用戶(hù)交互,簡(jiǎn)單來(lái)說(shuō)就是通過(guò)雙向數(shù)據(jù)綁定把View層和Model層連接起來(lái)。
在MVVM架構(gòu)下,View和Model沒(méi)有直接聯(lián)系,而是通過(guò)ViewModel進(jìn)行交互,我們只關(guān)注業(yè)務(wù)邏輯,不需要手動(dòng)操作DOM,不需要關(guān)注View和Model的同步工作。
9.如何利用webpack把代碼上傳服務(wù)器以及轉(zhuǎn)碼測(cè)試?
可以使用gulp +webpack來(lái)實(shí)現(xiàn)。
10.webpack 和 gulp的對(duì)比, webpack打包文件太大怎么辦?
1、Gulp側(cè)重于前端開(kāi)發(fā)的整個(gè)過(guò)程?的控制管理(像是流水線(xiàn));Webpack有人也稱(chēng)之為模塊打包機(jī)?
2、可以從去除不必要的插件,提取第三方庫(kù),代碼壓縮,代碼分割,設(shè)置緩存? 幾個(gè)方面著手優(yōu)化。
11.webpack怎么引入第三方的庫(kù)?
首先,配置一個(gè)entry入口文件,然后new?一個(gè)?HtmlWebpaekPlugin,通過(guò)script標(biāo)簽把第三方庫(kù)引入進(jìn)來(lái)
12.vue slot是做什么的?
插槽。如果想在組件中添加內(nèi)容,可以設(shè)置插槽。
插槽 分為 無(wú)名插槽和有名插槽。
13.vue和angular的優(yōu)缺點(diǎn)以及適用場(chǎng)合?
vue
優(yōu)點(diǎn): 1. 簡(jiǎn)單:官方文檔很清晰,比 Angular 簡(jiǎn)單易學(xué)。
2. 快速:異步批處理方式更新 DOM。
? 3. 組合:用解耦的、可復(fù)用的組件組合你的應(yīng)用程序。
? 4. 緊湊:~18kb min+gzip,且無(wú)依賴(lài)。
? 5. 強(qiáng)大:表達(dá)式 & 無(wú)需聲明依賴(lài)的可推導(dǎo)屬性 (computed properties)。
? 6. 對(duì)模塊友好:可以通過(guò) NPM、Bower 或 Duo 安裝,不強(qiáng)迫你所有的代碼都遵循 Angular 的各種規(guī)定,使用場(chǎng)景更加靈活。
缺點(diǎn):
1. 影響度不是很大:google了一下,有關(guān)于Vue.js多樣性或者說(shuō)豐富性少于其他一些有名的庫(kù)。
2. 不支持IE8
3. 新生兒:Vue.js是一個(gè)新的項(xiàng)目,沒(méi)有angular那么成熟。
應(yīng)用場(chǎng)景:小型應(yīng)用
angularJS:
優(yōu)點(diǎn):
1. 是一個(gè)比較完善的前端框架,包含服務(wù),模板,數(shù)據(jù)雙向綁定,模塊化,路由,過(guò)濾器,依賴(lài)注入等所有功能; ?
2. ng模塊化比較大膽的引入了Java的一些東西(依賴(lài)注入),能夠很容易的寫(xiě)出可復(fù)用的代碼,對(duì)于敏捷開(kāi)發(fā)的團(tuán)隊(duì)來(lái)說(shuō)非常有幫助。味著他有一個(gè)堅(jiān)實(shí)的基礎(chǔ)和社區(qū)支持。
3.? 模板功能強(qiáng)大豐富,自帶了極其豐富的angular指令。
4. 自定義指令,自定義指令后可以在項(xiàng)目中多次使用。
5. angularjs是互聯(lián)網(wǎng)巨人谷歌開(kāi)發(fā),這也意味著他有一個(gè)堅(jiān)實(shí)的基礎(chǔ)和社區(qū)支持。
缺點(diǎn):
1. 文檔例子非常少, 官方的文檔基本只寫(xiě)了api, 一個(gè)例子都沒(méi)有, 很多時(shí)候具體怎么用都是google來(lái)的, 或直接問(wèn)misko,angular的作者. ?
? ? ? 2. angular 入門(mén)很容易 但深入后概念很多, 學(xué)習(xí)中較難理解 ?
? ? ? 3. DI 依賴(lài)注入 如果代碼壓縮需要顯示聲明.
? ? ? 4. 對(duì)IE6/7 兼容不算特別好, 就是可以用jQuery自己手寫(xiě)代碼解決一些.
? ? ? 5. 指令的應(yīng)用的最佳實(shí)踐教程少, angular其實(shí)很靈活, 如果不看一些作者的使用原則,很容易寫(xiě)出 四不像的代碼, 例如js中還是像jQuery的思想有很多dom操作
應(yīng)用場(chǎng)景:在大型超大型web應(yīng)用開(kāi)發(fā)上。
React
優(yōu)點(diǎn):?
1.速度快:在UI渲染過(guò)程中,React通過(guò)在虛擬DOM中的微操作來(lái)實(shí)現(xiàn)對(duì)實(shí)際DOM的局部更新。?
2. 跨瀏覽器兼容:虛擬DOM幫助我們解決了跨瀏覽器問(wèn)題,它為我們提供了標(biāo)準(zhǔn)化的API,甚至在IE8中都是沒(méi)問(wèn)題的。?
3.模塊化:為你程序編寫(xiě)?yīng)毩⒌哪K化UI組件,這樣當(dāng)某個(gè)或某些組件出現(xiàn)問(wèn)題是,可以方便地進(jìn)行隔離。?
4.單向數(shù)據(jù)流:Flux是一個(gè)用于在JavaScript應(yīng)用中創(chuàng)建單向數(shù)據(jù)層的架構(gòu),它隨著React視圖庫(kù)的開(kāi)發(fā)而被Facebook概念化。?
5.同構(gòu)、純粹的javascript:因?yàn)樗阉饕娴呐老x(chóng)程序依賴(lài)的是服務(wù)端響應(yīng)而不是JavaScript的執(zhí)行,預(yù)渲染你的應(yīng)用有助于搜索引擎優(yōu)化。?
6.兼容性好:比如使用RequireJS來(lái)加載和打包,而B(niǎo)rowserify和Webpack適用于構(gòu)建大型應(yīng)用。它們使得那些艱難的任務(wù)不再讓人望而生畏。
缺點(diǎn):
React本身只是一個(gè)V而已,并不是一個(gè)完整的框架,所以如果是大型項(xiàng)目想要一套完整的框架的話(huà),基本都需要加上ReactRouter和Flux才能寫(xiě)大型應(yīng)用。
應(yīng)用場(chǎng)景:個(gè)性化需求、中型應(yīng)用
14.vue路由實(shí)現(xiàn)原理?
前端路由是直接找到與地址匹配的一個(gè)組件或?qū)ο?,并將其渲染出?lái)。
15.你們vue項(xiàng)目是打包了一個(gè)js文件,一個(gè)css文件,還是有多個(gè)文件?
根據(jù)vue-cli腳手架規(guī)范,一個(gè)js文件,一個(gè)CSS文件。
16.vue遇到的坑,如何解決的?
輸入框抖動(dòng)
加延時(shí)器防抖
17.vue的雙向綁定的原理,和angular的對(duì)比?
Object.defineproperty() ?
通過(guò)設(shè)置對(duì)象屬性的setter方法、getter方法來(lái)對(duì)對(duì)象取值和賦值
18.vue-cli,腳手架
1.nodemodules文件夾:模塊包
2.packjson.js 配置文件
3.app.vue? 主頁(yè)面
4.main.js 入口文件
5.router.js配置路由
7.store.js配置數(shù)據(jù)狀態(tài)管理
8.src文件夾:view頁(yè)面、components組件、store(數(shù)據(jù)的狀態(tài)、同步、異步方法)
19.Vue里面router-link在電腦上有用,在安卓上沒(méi)反應(yīng)怎么解決?
換成a標(biāo)簽,或者通過(guò)點(diǎn)擊事件js跳轉(zhuǎn)
20.對(duì)于Vue是一套漸進(jìn)式框架的理解
漸進(jìn)式代表的含義是:主張最少。
Vue可能有些方面是不如React,不如Angular,但它是漸進(jìn)的,沒(méi)有強(qiáng)主張,你可以在原有大系統(tǒng)的上面,把一兩個(gè)組件改用它實(shí)現(xiàn),當(dāng)jQuery用;也可以整個(gè)用它全家桶開(kāi)發(fā),當(dāng)Angular用;還可以用它的視圖,搭配你自己設(shè)計(jì)的整個(gè)下層用。你可以在底層數(shù)據(jù)邏輯的地方用OO和設(shè)計(jì)模式的那套理念,也可以函數(shù)式,都可以,它只是個(gè)輕量視圖而已,只做了自己該做的事,沒(méi)有做不該做的事,僅此而已。
漸進(jìn)式的含義,我的理解是:沒(méi)有多做職責(zé)之外的事。
21.vue.js的兩個(gè)核心是什么?
數(shù)據(jù)驅(qū)動(dòng)和組件化。
22.請(qǐng)問(wèn)v-if和v-show有什么區(qū)別?
相同點(diǎn):?兩者都是在判斷DOM節(jié)點(diǎn)是否要顯示。
不同點(diǎn):
a.實(shí)現(xiàn)方式:?v-if是根據(jù)后面數(shù)據(jù)的真假值判斷直接從Dom樹(shù)上刪除或重建元素節(jié)點(diǎn)。??v-show只是在修改元素的css樣式,也就是display的屬性值,元素始終在Dom樹(shù)上。
b.編譯過(guò)程:v-if切換有一個(gè)局部編譯/卸載的過(guò)程,切換過(guò)程中合適地銷(xiāo)毀和重建內(nèi)部的事件監(jiān)聽(tīng)和子組件;??v-show只是簡(jiǎn)單的基于css切換;
c.編譯條件:v-if是惰性的,如果初始條件為假,則什么也不做;只有在條件第一次變?yōu)檎鏁r(shí)才開(kāi)始局部編譯;?v-show是在任何條件下(首次條件是否為真)都被編譯,然后被緩存,而且DOM元素始終被保留;
d.性能消耗:v-if有更高的切換消耗,不適合做頻繁的切換;??v-show有更高的初始渲染消耗,適合做頻繁的額切換;
23.vue常用的修飾符
a、按鍵修飾符
如:.delete(捕獲“刪除”和”退格“鍵)? ? ??用法上和事件修飾符一樣,掛載在v-on:后面,語(yǔ)法:v-on:keyup.xxx=’yyy’??<inputclass =?'aaa' v-model="inputValue"?@keyup.delete="onKey"/>
b、系統(tǒng)修飾符
可以用如下修飾符來(lái)實(shí)現(xiàn)僅在按下相應(yīng)按鍵時(shí)才觸發(fā)鼠標(biāo)或鍵盤(pán)事件的監(jiān)聽(tīng)器
.ctrl? .alt? .shift? .meta
c、鼠標(biāo)按鈕修飾符
.left? .right? .middle
這些修飾符會(huì)限制處理函數(shù)僅響應(yīng)特定的鼠標(biāo)按鈕。如:A??鼠標(biāo)滾輪單擊觸發(fā)Click默認(rèn)是鼠標(biāo)左鍵單擊
d、其他修飾符
.lazy
在默認(rèn)情況下,v-model在每次input事件觸發(fā)后將輸入框的值與數(shù)據(jù)進(jìn)行同步 ,我們可以添加lazy修飾符,從而轉(zhuǎn)變?yōu)槭褂胏hange事件進(jìn)行同步:<inputv-model.lazy="msg" >
.number
如果想自動(dòng)將用戶(hù)的輸入值轉(zhuǎn)為數(shù)值類(lèi)型,可以給v-model添加.number修飾符:<input v-model.number="age" type="number">
這通常很有用,因?yàn)榧词乖趖ype="number"時(shí),HTML 輸入元素的值也總會(huì)返回字符串。如果這個(gè)值無(wú)法被parseFloat()解析,則會(huì)返回原始的值。
.trim
如果要自動(dòng)過(guò)濾用戶(hù)輸入的首尾空白字符,可以給 v-model 添加 trim 修飾符:<inputv-model.trim="msg">
同樣前面都有空格加上.trim后 將前后空格都去掉了。
24.v-on可以監(jiān)聽(tīng)多個(gè)方法嗎?
????可以
25.vue中key值的作用
使用key來(lái)給每個(gè)節(jié)點(diǎn)做一個(gè)唯一標(biāo)識(shí)
key的作用主要是為了高效的更新虛擬DOM。另外vue中在使用相同標(biāo)簽名元素的過(guò)渡切換時(shí),也會(huì)使用到key屬性,其目的也是為了讓vue可以區(qū)分它們,
否則vue只會(huì)替換其內(nèi)部屬性而不會(huì)觸發(fā)過(guò)渡效果。
26.Vue 組件中 data 為什么必須是函數(shù)?
在new Vue()中,data是可以作為一個(gè)對(duì)象進(jìn)行操作的,然而在component中,data只能以函數(shù)的形式存在,不能直接將對(duì)象賦值給它。
當(dāng)data選項(xiàng)是一個(gè)函數(shù)的時(shí)候,每個(gè)實(shí)例可以維護(hù)一份被返回對(duì)象的獨(dú)立的拷貝,這樣各個(gè)實(shí)例中的data不會(huì)相互影響,是獨(dú)立的。
27.v-for 與 v-if 的優(yōu)先級(jí)
????v-for的優(yōu)先級(jí)比v-if高。
28.說(shuō)出至少 4 種 vue 當(dāng)中的指令和它的用法
?? ?v-if(判斷是否隱藏)? ?v-for(把數(shù)據(jù)遍歷出來(lái))? v-bind(綁定屬性)? v-model(實(shí)現(xiàn)雙向綁定)
29.vue中子組件調(diào)用父組件的方法
第一種方法是直接在子組件中通過(guò)this.$parent.event來(lái)調(diào)用父組件的方法。
第二種方法是在子組件里用$emit向父組件觸發(fā)一個(gè)事件,父組件監(jiān)聽(tīng)這個(gè)事件就行了。
第三種是父組件把方法傳入子組件中,在子組件里直接調(diào)用這個(gè)方法。
30.vue中父組件調(diào)用子組件的方法
父組件利用ref屬性操作子組件方法。
父:<child ref="childMethod"></child>
子:method: {test() {alert(1)}}
在父組件里調(diào)用test即 this.$refs.childMethod.test()
31.父組件給子組件傳值:
1.父組件調(diào)用子組件的時(shí)候動(dòng)態(tài)綁定屬性? <parent :dataList='dataList'></parent>
2.子組件定義props接收動(dòng)態(tài)綁定的屬性props: ['dataList'] ? ? ? ?
3.子組件使用數(shù)據(jù)
32.子組件主動(dòng)獲取父子間的屬性和方法:
在子組件中使用this.$parent.屬性/this.$parent.方法。
33.子組件給父組件傳值:
一、使用ref屬性
1.父組件調(diào)用子組件時(shí)綁定屬性ref? <parent :ref='parent'></parent>
2.在父組件中使用this.$refs.parent.屬性/this.$refs.parent.方法
二、使用$emit方法
1.子組件調(diào)用this.$emit('方法名‘,傳值)
2.父組件通過(guò)子組件綁定的'方法名'獲取傳值。
34.vue頁(yè)面級(jí)組件之間傳值
1.使用vue-router通過(guò)跳轉(zhuǎn)鏈接帶參數(shù)傳參。
2.使用本地緩存localStorge。
3.使用vuex數(shù)據(jù)管理傳值。
35.說(shuō)說(shuō)vue的動(dòng)態(tài)組件。
多個(gè)組件通過(guò)同一個(gè)掛載點(diǎn)進(jìn)行組件的切換,is的值是哪個(gè)組件的名稱(chēng),那么頁(yè)面就會(huì)顯示哪個(gè)組件。
主要考查面試這 component的 is屬性。
36.keep-alive內(nèi)置組件的作用
可以讓當(dāng)前組件或者路由不經(jīng)歷創(chuàng)建和銷(xiāo)毀,而是進(jìn)行緩存,凡是被keep-alive組件包裹的組件,除了第一次以外。不會(huì)經(jīng)歷創(chuàng)建和銷(xiāo)毀階段的。第一次創(chuàng)建后就會(huì)緩存到緩存當(dāng)中
37.遞歸組件的用法
組件是可以在它們自己的模板中調(diào)用自身的。不過(guò)它們只能通過(guò)?name?選項(xiàng)來(lái)做這件事。
首先我們要知道,既然是遞歸組件,那么一定要有一個(gè)結(jié)束的條件,否則就會(huì)使用組件循環(huán)引用,最終出現(xiàn)“max stack size exceeded”的錯(cuò)誤,也就是棧溢出。那么,我們可以使用v-if="false"作為遞歸組件的結(jié)束條件。當(dāng)遇到v-if為false時(shí),組件將不會(huì)再進(jìn)行渲染。
38.怎么定義vue-router的動(dòng)態(tài)路由?怎么獲取傳過(guò)來(lái)的值?
動(dòng)態(tài)路由的創(chuàng)建,主要是使用path屬性過(guò)程中,使用動(dòng)態(tài)路徑參數(shù),以冒號(hào)開(kāi)頭,如下:
{path: '/details/:id',name: 'Details',components: Details}
訪(fǎng)問(wèn)details目錄下的所有文件,如果details/a,details/b等,都會(huì)映射到Details組件上。
當(dāng)匹配到/details下的路由時(shí),參數(shù)值會(huì)被設(shè)置到this.$route.params下,所以通過(guò)這個(gè)屬性可以獲取動(dòng)態(tài)參數(shù)
this.$route.params.id
39.vue-router有哪幾種路由守衛(wèi)?
路由守衛(wèi)為:
全局守衛(wèi):beforeEach
后置守衛(wèi):afterEach
全局解析守衛(wèi):beforeResolve
路由獨(dú)享守衛(wèi):beforeEnter
40.$route和 $router的區(qū)別是什么?
? ? $router為VueRouter的實(shí)例,是一個(gè)全局路由對(duì)象,包含了路由跳轉(zhuǎn)的方法、鉤子函數(shù)等。
????$route 是路由信息對(duì)象||跳轉(zhuǎn)的路由對(duì)象,每一個(gè)路由都會(huì)有一個(gè)route對(duì)象,是一個(gè)局部對(duì)象,包含path,params,hash,query,fullPath,matched,name等路由信息參數(shù)。
41.vue-router響應(yīng)路由參數(shù)的變化
(1)用watch 檢測(cè)
(2)組件內(nèi)導(dǎo)航鉤子函數(shù)
42.?vue-router 傳參
(1)使用Params:
只能使用name,不能使用path
參數(shù)不會(huì)顯示在路徑上
瀏覽器強(qiáng)制刷新參數(shù)會(huì)被清空
?
(2)使用query:
參數(shù)會(huì)顯示在路徑上,刷新不會(huì)被清空
name 可以使用path路徑
?
43.不用Vuex會(huì)帶來(lái)什么問(wèn)題?
1.可維護(hù)性會(huì)下降,你要想修改數(shù)據(jù),你得維護(hù)三個(gè)地方
2.可讀性會(huì)下降,因?yàn)橐粋€(gè)組件里的數(shù)據(jù),你根本就看不出來(lái)是從哪來(lái)的
3.增加耦合,大量的上傳派發(fā),會(huì)讓耦合性大大的增加,本來(lái)Vue用Component就是為了減少耦合,現(xiàn)在這么用,和組件化的初衷相背。
44.vuex有哪幾種屬性?
有五種,分別是 State、 Getter、Mutation 、Action、 Module。
45.vuex的State特性是?
1.Vuex就是一個(gè)倉(cāng)庫(kù),倉(cāng)庫(kù)里面放了很多對(duì)象。其中state就是數(shù)據(jù)源存放地,對(duì)應(yīng)于與一般Vue對(duì)象里面的data
2.state里面存放的數(shù)據(jù)是響應(yīng)式的,Vue組件從store中讀取數(shù)據(jù),若是store中的數(shù)據(jù)發(fā)生改變,依賴(lài)這個(gè)數(shù)據(jù)的組件也會(huì)發(fā)生更新
3.它通過(guò)mapState把全局的 state 和 getters 映射到當(dāng)前組件的 computed 計(jì)算屬性中
46.vuex的Getter特性是?
1.getters 可以對(duì)State進(jìn)行計(jì)算操作,它就是Store的計(jì)算屬性
2. 雖然在組件內(nèi)也可以做計(jì)算屬性,但是getters 可以在多組件之間復(fù)用
3. 如果一個(gè)狀態(tài)只在一個(gè)組件內(nèi)使用,是可以不用getters
47.vuex的Mutation特性是?
1.Action 類(lèi)似于 mutation,不同在于:
2.Action 提交的是 mutation,而不是直接變更狀態(tài)。
3.Action 可以包含任意異步操作
48.Vue.js中ajax請(qǐng)求代碼應(yīng)該寫(xiě)在組件的methods中還是vuex的actions中?
1.如果請(qǐng)求來(lái)的數(shù)據(jù)是不是要被其他組件公用,僅僅在請(qǐng)求的組件內(nèi)使用,就不需要放入vuex 的state里。
2.如果被其他地方復(fù)用,這個(gè)很大幾率上是需要的,如果需要,請(qǐng)將請(qǐng)求放入action里,方便復(fù)用,并包裝成promise返回,在調(diào)用處用async await處理返回的數(shù)據(jù)。如果不要復(fù)用這個(gè)請(qǐng)求,那么直接寫(xiě)在vue文件里很方便。
49.promise是什么?
promise 是一個(gè)異步編程的解決方案,解決了之前異步回調(diào)層層嵌套的問(wèn)題,promise提供了一個(gè)容器,內(nèi)部編寫(xiě)異步代碼,將異步結(jié)果通過(guò)resolve方法暴露,實(shí)例對(duì)象下調(diào)用then方法指定結(jié)果處理函數(shù)。
new Promise(? function (resolve, reject) {?
? ? ????????// 一段耗時(shí)的異步操作? ? resolve('成功') // 數(shù)據(jù)處理完成
? ? ????????// reject('失敗') // 數(shù)據(jù)處理出錯(cuò)
? ????????}
????????).then(? (res) => {console.log(res)},? // 成功 ?? ? ? ?
??????????(err) => {console.log(err)} // 失敗)