本篇文章給大家分享的是有關(guān)vue-resource中怎么通過調(diào)用promise獲取數(shù)據(jù),小編覺得挺實(shí)用的,因此分享給大家學(xué)習(xí),希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。
創(chuàng)新互聯(lián)公司專注于企業(yè)營銷型網(wǎng)站建設(shè)、網(wǎng)站重做改版、海棠網(wǎng)站定制設(shè)計、自適應(yīng)品牌網(wǎng)站建設(shè)、H5場景定制、購物商城網(wǎng)站建設(shè)、集團(tuán)公司官網(wǎng)建設(shè)、成都外貿(mào)網(wǎng)站建設(shè)公司、高端網(wǎng)站制作、響應(yīng)式網(wǎng)頁設(shè)計等建站業(yè)務(wù),價格優(yōu)惠性價比高,為海棠等各大城市提供網(wǎng)站開發(fā)制作服務(wù)。
先來說說 vue-resource
vue-resource是Vue.js的一款插件,它可以通過XMLHttpRequest或JSONP發(fā)起請求并處理響應(yīng)。也就是說,$.ajax能做的事情,vue-resource插件一樣也能做到,而且vue-resource的API更為簡潔。
vue-resource的優(yōu)勢和介紹,可以通過下面這個地址來了解。
Vue.js——vue-resource全攻略
vue-resource的API分別有以下這些:
http get
http jsonp
http post
http put
http delete
resource get
resource save
resource update
resource remove
inteceptor
我現(xiàn)在的工作中,常用的就是get和post。
引入vue-resource后,可以基于全局的Vue對象使用http,也可以基于某個Vue實(shí)例使用http?,F(xiàn)在的項目中,基本上都是后者,因此在不同組件的beforeCreate或mounted鉤子中取。
// 基于全局Vue對象使用http Vue.http.get('/someUrl', [options]).then(successCallback, errorCallback); Vue.http.post('/someUrl', [body], [options]).then(successCallback, errorCallback); // 在一個Vue實(shí)例內(nèi)使用$http this.$http.get('/someUrl', [options]).then(successCallback, errorCallback); this.$http.post('/someUrl', [body], [options]).then(successCallback, errorCallback);
在發(fā)送請求后,使用then方法來處理響應(yīng)結(jié)果,then方法有兩個參數(shù),第一個參數(shù)是響應(yīng)成功時的回調(diào)函數(shù),第二個參數(shù)是響應(yīng)失敗時的回調(diào)函數(shù)。
vue-resource支持Promise API,Promise是ES6的特性,Promise的中文含義為“先知”,Promise對象用于異步計算。
再簡單介紹一下Promise對象
ES6原生提供了Promise對象。所謂Promise對象,就是代表了未來某個將要發(fā)生的事件(通常是一個異步操作)。它的好處在于,有了Promise對象,就可以將異步操作以同步操作的流程表達(dá)出來,避免了層層嵌套的回調(diào)函數(shù)。此外,Promise對象還提供了一整套完整的接口,使得可以更加容易地控制異步操作。Promise對象的概念的詳細(xì)解釋,請參考《JavaScript標(biāo)準(zhǔn)參考教程》。
ES6的Promise對象是一個構(gòu)造函數(shù),用來生成Promise實(shí)例。下面是Promise對象的基本用法。
var promise = new Promise(function(resolve, reject) { if (/* 異步操作成功 */){ resolve(value); } else { reject(error); } }); promise.then(function(value) { // success }, function(value) { // failure });
下面我們來直接使用:
假如我們請求下面這個json文件:
// 請求成功 { "code": 0, "msg": "get member success", "content": { "plank_id": "1", "start_at": "1234567890", "status": "3", "members_num": 1, "members": [ { "id": "14", "name": "", "avatar": "", "status": "3" } ] }, "is_mobile_user": false, "jssdk": { "appId": "wxec4d172a4f73ee6f", "timestamp": "1490367697", "nonceStr": "58d534d1b536a", "signature": "d8d8ceb0f39ddeb3085fd197e5df5caddb1f1ba1" } } // 請求失敗 { "code": 1, "msg": "錯誤信息", "content": "", "is_mobile_user": true, "jssdk": { "appId": "wxec4d172a4f73ee6f", "timestamp": "1487750749", "nonceStr": "58ad465dd5ba5", "signature": "4aa01f5a89ce79ee4c53249e0cdb84800f841004" } }
get 傳統(tǒng)的寫法
import {MessageBox} from 'mint-ui'; this.$http.get(dataUrl) .then(function (response) { // 請求成功 let data = response.data; if (data.code === 0) { this.content = data.content; // 取到數(shù)據(jù) } else { MessageBox('提示', data.msg); } }, function (response) { // 請求失敗 MessageBox('提示', response.data.msg); })
get ES6的語法 直接用解構(gòu)賦值和剪頭函數(shù)的方式
import {MessageBox} from 'mint-ui'; this.$http.get(dataUrl) .then(({data:{code, content, jssdk, msg}}) => { // 請求成功 if (data.code === 0) { this.content = content; // 取到數(shù)據(jù) } else { MessageBox('提示', msg); } }, ({data:{msg}}) => { // 請求失敗 MessageBox('提示',msg); });
post 傳統(tǒng)的語法
let group_id = this.$route.params.id; let data = { group_id: group_id, mobile: this.mobile, code: this.smsCode, name: this.memberName }; import {MessageBox} from 'mint-ui'; this.$http.post(checkUrl, data) .then(function (response) { // 請求成功 let data = response.data; if (data.code === 0) { this.content = data.content; // 取到數(shù)據(jù) } else { MessageBox('提示', data.msg); } }, function (response) { // 請求失敗 MessageBox('提示', response.data.msg); });
post ES6的語法,直接用解構(gòu)賦值和剪頭函數(shù)的方式
let group_id = this.$route.params.id; let data = { group_id: group_id, mobile: this.mobile, code: this.smsCode, name: this.memberName }; import {MessageBox} from 'mint-ui'; this.$http.post(checkUrl, data) .then(({data:{code, content, jssdk, msg}}) => { // 請求成功 if (code === 0) { this.content = content; // 取到數(shù)據(jù) } else { MessageBox('提示', msg); } }, ({data:{msg}}) => { // 請求失敗 MessageBox('提示',msg); });
使用解構(gòu)賦值和剪頭函數(shù)可以讓代碼更簡潔,使用起來更方便,我們在{data:{code, content, jssdk, msg}}中的數(shù)據(jù),實(shí)際上是JS引擎把promise給你的參數(shù)結(jié)構(gòu)了,因此,你可以直接取到。
需要注意的是,第一個“MessageBox('提示', msg);”中的msg和第二個“MessageBox('提示',msg);”中的msg不是同一個,第一個是成功的msg,第二個是失敗的msg。
將post請求方式改成get請求方式的語法(一)
拼接一個參數(shù):
const checkUrl = 'plank-show/start?start_at=' + (new Date()).valueOf(); this.$http.get(checkUrl) .then(({data:{code, content, jssdk, msg}}) => { if (code == 0) { MessageBox('提示', msg); } else { MessageBox('提示', msg); } }, ({data:{msg}}) => { MessageBox('提示', msg); });
將post請求方式改成get請求方式的語法(二)
拼接多個參數(shù):
let queryData = this.$route.query; let dataUrl = "member/coach?group_id=" + queryData.my_group_id + "&id=" + queryData.cheer_id; this.$http.get(dataUrl) .then(({data:{code, content, jssdk, msg}}) => { if (code === 0) { this.content = content; } else { MessageBox('提示', msg) } }, ({data:{msg}}) => { MessageBox('提示', msg); });
以上就是vue-resource中怎么通過調(diào)用promise獲取數(shù)據(jù),小編相信有部分知識點(diǎn)可能是我們?nèi)粘9ぷ鲿姷交蛴玫降?。希望你能通過這篇文章學(xué)到更多知識。更多詳情敬請關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。