首页 > 语言 > JavaScript > 正文

vue-resource调用promise取数据方式详解

2024-05-06 15:14:08
字体:
来源:转载
供稿:网友

用了好久的vue-resource,好像每一次使用的时候,都要去看一下上一次是怎么写的,具体的语法过不了多久又忘记了,甚至不知道其中的原理,只知道一些简单的使用,一会儿用ES6的语法,一会儿又用传统的语法,为了改变这种不良的习惯,并理清vue-resource使用promise取数据的原理,今天把这一块整理一下。

先来说说 vue-resource

vue-resource是Vue.js的一款插件,它可以通过XMLHttpRequest或JSONP发起请求并处理响应。也就是说,$.ajax能做的事情,vue-resource插件一样也能做到,而且vue-resource的API更为简洁。

vue-resource的优势和介绍,可以通过下面这个地址来了解。

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

我现在的工作中,常用的就是get和post。

引入vue-resource后,可以基于全局的Vue对象使用http,也可以基于某个Vue实例使用http。现在的项目中,基本上都是后者,因此在不同组件的beforeCreate或mounted钩子中取。

// 基于全局Vue对象使用httpVue.http.get('/someUrl', [options]).then(successCallback, errorCallback);Vue.http.post('/someUrl', [body], [options]).then(successCallback, errorCallback);// 在一个Vue实例内使用$httpthis.$http.get('/someUrl', [options]).then(successCallback, errorCallback);this.$http.post('/someUrl', [body], [options]).then(successCallback, errorCallback);

在发送请求后,使用then方法来处理响应结果,then方法有两个参数,第一个参数是响应成功时的回调函数,第二个参数是响应失败时的回调函数。

vue-resource支持Promise API,Promise是ES6的特性,Promise的中文含义为“先知”,Promise对象用于异步计算。

再简单介绍一下Promise对象

ES6原生提供了Promise对象。所谓Promise对象,就是代表了未来某个将要发生的事件(通常是一个异步操作)。它的好处在于,有了Promise对象,就可以将异步操作以同步操作的流程表达出来,避免了层层嵌套的回调函数。此外,Promise对象还提供了一整套完整的接口,使得可以更加容易地控制异步操作。Promise对象的概念的详细解释,请参考《JavaScript标准参考教程》。

ES6的Promise对象是一个构造函数,用来生成Promise实例。下面是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" }}            
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

图片精选