小程序学习:回调函数与Promise

1、同步与异步

在小程序中网络请求wx.request不像其他框架可以设置同步或异步,wx.request在小程序中只能是异步方式。
既然是异步方式,就不能用以下的方式获取网络数据:

let data = wx.request({
	url:'',
	header:{
		appket:""
	}
})

而应该使用回调函数来获取请求后的数据。

wx.request({
	url:'',
	header:{
		appket:""
	},
	success:function(res){
		console.log(res)
	}
})

2、箭头函数

如果回调函数使用传统写法,即上述写法,在使用data里的数据是,this.data中的this指的并不是Page对象,所以这样无法获取data数据。通常做法是在回调函数外部用that来存储this:

let that = this;
wx.request({
	url:'',
	header:{
		appket:""
	},
	success:function(res){
		console.log(that.data.test)
	}
})

而使用箭头函数,则可以不需要that来存储this,直接使用this就行:

wx.request({
	url:'',
	header:{
		appket:""
	},
	success:(res) => {
		console.log(this.data.test)
	}
})

3、回调函数的嵌套

如果在一个函数里要调用一个异步函数,则一定要把一个回调函数作为该函数的参数。
比如一个函数getLatest()要根据index从服务器获取相应的latest对象,则应该把获取数据的操作放在回调里,然后把这个回调作为getLatest()的一个参数。
getLatest()函数定义:

  getLatest(sCallback) {
    this.request({
      url: 'classic/latest',
      success: (data) => {
        // 如果不用箭头函数,this将指代不正确
        let key = this._fullKey(data.index)
        wx.setStorageSync(key, data)
        this._setLatestIndex(data.index)
        sCallback(data)
      }
    })
  }

其中request函数也是异步函数,因此sCallback要放在request函数的回调中。
request函数定义如下:

  request(params) {
    var that = this
    var url = this.baseRestUrl + params.url;

    if (!params.method) {
      params.method = 'GET';
    }
    wx.request({
      url: url,
      data: params.data,
      method: params.method,
      header: {
        'content-type': 'application/json',
        'appkey':config.appkey
      },
      success: function (res) {
        // 判断以2(2xx)开头的状态码为正确
        // 异常不要返回到回调
  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值