微信小程序> 小程序wx.request和promise

小程序wx.request和promise

浏览量:5860 时间: 来源:南太平洋_99

1.Promise对象基础

1.1 Promise 的状态

Promise有3种状态:

  • Pending:进行中
  • Resolved(Fulfilled):已完成
  • Rejected:已失败

1.2 .then() 和 .catch()

Promise构造器接受一个函数作为参数,这个函数有两个参数:resolve,reject,分别代表这个Promise实例成功之后的回调函数和失败之后的回调函数。

不管是then方法还是catch方法返回的都是一个新的Promise实例,这意味着Promise可以链式调用then和catch,每一个方法的返回值作为下一个方法的参数

var promise = new Promise(function (resolve, reject) {    var a = 1    if (a === 1) {        resolve(a)    } else {        reject(error)    }})promise.then(function (value) {    console.log(value++)    return value}).catch(function (error) {    console.log(error)}).then(function (value) {    console.log(value++)})// 输出:// 1// 2

1.3 Promise.resolve() 和 Promise.reject()

两者都是是new promise()的快捷方式。

Promise.resolve(42).then(function(value){        console.log(value);    });        // 等同于        var promise = new Promise(function (resolve) {      resolve(42)    })    promise.then(function (value) {      console.log(value)    })

1.4 Promise.all() 和 Promise.race()

Promise.all()

接收一个Promise对象的数组作为参数,当这个数组里的所有Promise对象全部变为resolve的时候,该方法才resolve。
如果其中一个Promise对象为reject的话,则该方法为reject。

// `delay`毫秒后执行resolvefunction timerPromisefy(delay) {    return new Promise(function (resolve) {        setTimeout(function () {            resolve(delay);        }, delay);    });}// 当数组中所有Promise对象被resolve之后,该方法才返回Promise.all([    timerPromisefy(1),    timerPromisefy(32),    timerPromisefy(64),    timerPromisefy(128)]).then(function (value) {    console.log(value);    });//输出: [ 1, 32, 64, 128 ]

2. 小程序wx.request

wx.request({  url: 'test.php', //仅为示例,并非真实的接口地址  data: {    x: '',    y: ''  },  header: {    'content-type': 'application/json' // 默认值  },  success (res) {    console.log(res.data)  }})

小程序
小程序

3. 用Promise封装wx.request

class HttpClient {  constructor() {    this.xhr = wx.request;  }  checkArguments(args) {    if (!args.length) return false;    let originalParam = args[0];    let param = Object.create(null);    if (typeof originalParam === 'string' && originalParam.length) {      param.url = originalParam;      return param;    } else if (Utils.isObject(originalParam)) {      let method = (originalParam.method || 'GET').toUpperCase();      if (METHODS.toString().indexOf(method) === -1) {        Utils.warn(          `HttpClient request warning : Request method should be ${METHODS.join(            '/',          )}`,        );        method = 'GET';      } else if (method === 'POST') {        !Utils.isObject(originalParam.header) && (originalParam.header = {});        originalParam.header['content-type'] =          'application/x-www-form-urlencoded';      }      return Object.assign(param, originalParam, { method });    }    return false;  }  request(...args) {    let params = this.checkArguments(args);    if (!params)      throw new Error('HttpClient request error : Invalid parameters');    return new Promise((resolve, reject) => {      params['success'] = response => {        if (response.statusCode === 200) resolve(response.data);        else reject(response);      };      params['fail'] = reject;      this.xhr(params);    });  }}export default new HttpClient();

调用方法

getSupportResult() {    return HttpClient.request({      url: ,      method: 'POST',      data: {              }    })    .then(res => {       })    .catch((e) => {         });  },

版权声明

即速应用倡导尊重与保护知识产权。如发现本站文章存在版权问题,烦请提供版权疑问、身份证明、版权证明、联系方式等发邮件至197452366@qq.com ,我们将及时处理。本站文章仅作分享交流用途,作者观点不等同于即速应用观点。用户与作者的任何交易与本站无关,请知悉。

产品经理

手机 : 13312967497

擅长 : 小程序流量变现

扫码领取礼包

最新资讯

热门模板

  • 头条
  • 搜狐
  • 微博
  • 百家
  • 一点资讯
  • 知乎