小程序学习(二)

293 阅读1分钟

Page中的方法比app.js先执行的解决方案

问题描述

在小程序开发中,一般是在app.js中调用微信的登录接口获取 open_id,这个过程是异步的;而我们在page的onload中经常需要使用 open_id 作为请求参数去请求其他的业务接口或执行某些方法。这样很容易出现的问题就是app.js中的open_id还没有返回,pages中的方法就已经执行完了。

解决方案

在globalData中定义一个标志位,标识app.js中的请求是否完成;在page中根据这个标志位确定是否执行,如果app.js中请求完成,则直接请求即可;否则,定义一个全局回调函数去执行相同的代码,并在app.js中调用。感觉自己没有描述清楚,看段代码吧~

app.js

App({
  onLaunch: function () {
    // login
    wx.login({
      success: res => {
        // 发送 res.code 到后台换取 openId, sessionKey, unionId
        wx.request({
          url: `request url`,
          data: {
            code: res.code,
          },
          success: res => {
            // your code
            this.globalData.isEnd = true;
            if (this.callback) {
              this.callback();
            }
          }
        })
      }
    })
  },
  
  globalData: {
    isEnd: false,
  }
})

Page

const app = getApp();
Page({
  onLoad: function(options) {
    if (app.globalData.isEnd) {
      // 执行你的方法
    } else {
      app.callback = () => {
        // 执行你的方法,跟上面的代码一致
      }
    }
  }
})

2020-06-09 更新

输入框传输数据丢失问题

问题描述

部分用户反馈绑定账号有问题。后端接收到的裸数据有些缺失一个字符,而前端查看network是正常的,经过排查发现当安卓用户(自测iPhone 8 没问题,其他机型未测试)使用 手写输入 时,会缺失最后一个字符。

解决方案

增加绑定 onblur 事件,在失去焦点后将值更新,这样就不会缺失了

未完待续~