博主個人部落格**
promise和ajax功能類似,都是用來做非同步請求的。promise的優勢在於可以鏈式程式設計,在response還沒回應時,then操作中可以把正常流程**實現,catch捕獲異常(而且可以放在最後進行統一捕獲),可以不斷then 下去; 前後端分離大背景下,ajax是基於原生的xhr,已經不能很好的適應mvvm這種前端模型了。
本章主要是用來描述vue專案開發前端頁面的,為何先介紹promise呢?因為vue核心元件始終是圍繞著promise展開的;如vuex.store的 actions 中方法 都是用promise來實現的;後端api互動用的axios,也是promise封裝的。
先簡單申明乙個promise物件;
new
promise
(function
(resolve, reject)
)
網上有說構造promise時 就乙個引數,有的說兩個引數,都沒錯; 如果說乙個引數,這個引數就是乙個函式,如果說兩個引數,指的是這個函式有兩個引數。
promise狀態說明,從初始化時pending——》到resolved或rejected(只能是二者中某一種狀態),在未呼叫resolve或reject方法時,promise都是pending狀態,一旦呼叫了resolve或reject方法 promise就結束了,promise狀態為resolved或rejected;其建構函式中不能進行其他操作了,只能進行後續的then或catch操作了(then 、catch也是promise型別物件)。
所以promise 生命流程 只有兩種狀態 ;
正常的: pending狀態(未呼叫resolve方法前)---->resolved狀態;
或者失敗的 : pending狀態(未呼叫rejecte方法前)-------> rejected狀態
resolved狀態promise能使用then進行後續處理,rejected狀態promise物件可以用catch進行處理;在呼叫方法resolve()改變promise狀態時,可以傳遞引數,如resolve(data)(只能接收乙個引數,多個引數想辦法合併成陣列),後續接著用then處理;then的構造器中可以直接使用傳遞過來的data;這樣無限的then搞下去,引數就通過resolve方法來傳遞。如果非同步請求獲取物件不符合要求,判斷後,rejecte方法來改變promise狀態 也可以通過它傳遞引數,最終變成rejected狀態的promise,這種狀態promise能呼叫catch,在其構造器中進行後續異常捕獲或丟擲操作。
登入過程
this
.$store.
dispatch
('login'
,this
.loginform)
.then((
)=>
)this
.loading =
false})
.catch((
)=>
)
actions中login方法 接收到傳遞過來引數,然後返回的是promise物件,這個promise物件裡面 有執行axios的login方法,axios 的login 如果成功,就傳遞resolve攜帶的值,如果失敗就傳遞reject攜帶的值。
login
(, userinfo)
= userinfo
return
newpromise
((resolve, reject)
=>).
then
(response =>
= response
commit
('set_token'
, data.token)
settoken
(data.token)
resolve()
}).catch
(error =>)}
)},
resolved狀態promise會被then捕捉,所以登入成功後執行then,then構造器裡面有登入後頁面重定向操作等; rejected狀態可以被catch捕捉。
通過上面** ,可以總結出利用promise 構造登入的非同步請求
new promise((resovle,reject)=>)
.catch(err=> )
})
login請求呼叫axios提供的api,返回型別本質是promise; 如果登入成功後變成resolved狀態,可以被then捕獲,then中可以把login成功後的資料response(就是返回體) 拿來用,用完後resolve方法改變狀態(可以傳引數); 如果login失敗,判斷後置為rejected狀態 並且傳遞相應資料,然後catch來處理。
rejected狀態promise與catch鏈式處理示例:
promise物件(有呼叫reject方法的).
catch((
)=>).
catch
(err =>
);
axios 呼叫介面成功後,返回的response.data 才是報文體(後端傳遞過來的引數)response是包含了報文、報文頭、認證資訊等。如果後端封裝的報文體由code、msg 、data 組成,需要用response.data.data 才能取到想要的資料。 在vue專案中, mock資料
1.在根目錄下建立 test 目錄,用來存放模擬的 json 資料,在 test 目錄下建立模擬的資料 data.json 檔案 2.在build目錄下的 dev server.js的檔案作如下更改 3.在.vue做請求,就可以成功獲取data.json的資料了,下面使用 axios 進行請求axi...
在 Vue 專案中使用 ECharts
重要檔案版本 在 vue 專案中使用 echarts 只需要在 vue 元件的mounted生命週期中 初始化 echarts,然後在每次配置項有變更時呼叫setoption 方法更新配置即可 專案模板原始碼 class default chart style div template import...
在vue專案中使用echarts
安裝echarts依賴 npm install echarts s 建立圖表 全域性引入 main.js 引入echarts import echarts from echarts vue.prototype.echarts echarts 這裡也可以在router下index.js引入,看規定 h...