微信小程序:自定义回调函数(callback)

使用场景

自定义了一个方法getNameAndCount(),用于向后台发送请求,获取数据库里的一些数据在页面打开的时候就显示在页面上。

/**
   * 生命周期函数--监听页面加载
   * 一个页面只会调用一次
   */
  onLoad: function (options) {
    this.data.openid = app.globalData.openid
    this.data.requestUrl = app.globalData.requestUrl
    // 获取所有调味品和菜品的数量
    this.getNameAndCount();
  },

如上所示,由于onLoad()是生命周期函数,在页面加载的时候就会执行,在Page.onLoad()中调用getNameAndCount()就会使得页面显示的时候已经获取到了想要的值。
但由于 getNameAndCount() 是网络请求,可能会在 Page.onLoad 之后才返回,出现页面显示值为空的情况(实际上已经从后台获取到了值)。

解决方法

如下所示,就需要在getNameAndCount()中自定义一个回调函数(getNameAndCount())。

getNameAndCount: function(){
    // ...
    wx.request({
     // ...
     // 请求成功
      success: function (res) {
      // ...
        // 由于 getUserInfo 是网络请求,可能会在 Page.onLoad 之后才返回
        // 所以此处加入 callback 以防止这种情况
        if (this.getNameAndCountCallback) {
          this.getNameAndCountCallback(res)
        }
      },
      fail: function (res) {
        console.log(res)
      }
    })
getNameAndCount()的使用

在onShow()中会获取getNameAndCount()请求成功返回的值,所以将getNameAndCountCallback()的调用写在onShow()中,这样无论getNameAndCount()是不是在Page.onLoad之后返回,都会在页面显示我想要的值。
注意:回调函数的使用方式可以根据实际情况灵活变通,此处的例子只是为了解决我自己遇到的问题。且回调函数的命名只要保证前后一致就行。

/**
   * 生命周期函数--监听页面加载
   * 一个页面只会调用一次
   */
  onLoad: function (options) {
    //....
    this.getNameAndCount();
  },
/**
   * 生命周期函数--监听页面显示
   * 每次打开页面都会调用一下
   */
  onShow: function () {
      // 由于 getNameAndCount 是网络请求,可能会在 Page.onLoad 之后才返回
      // 所以此处加入 callback 以防止这种情况
      this.getNameAndCountCallback = res => {
        this.setData({
          // .....
        })
      }
  }
  • 4
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值