微信小程序 res =>的意义及userInfoReadyCallback函数的作用

微信小程序 --- 小程序基础知识 什么是微信小程序微信小程序是一种运行在微信内部的 轻量级 应用程序。在使用小程序时 不需要下载安装,用户 扫一扫 或 搜一下 即可打开应用。它也体现了 “用完即走” 的理念,用户不用关心安装太多应用的问题。它实现了应用“触手可及”的梦想,应用无处不在,随时可用,但又 无须安装卸载。特点小程序的四大特性:无须安装、用完即走、无须卸载、触手可及无须安装:体积小,用户感知不到下载的过程触手可及:用户 扫一扫 或 搜一下 即可打开应用,通过下拉能访问使用的小程序用完即走,无须卸载。 阅读详情

刚开始接触微信小程序,想写个迷你计算器的小程序,感觉开发挺方便的,当准备使用用户信息时,打算看一下它是怎么获取用户信息的,为之后获取用户openid准备。获取用户信息主要在app.js 和 index.js中

代码中的 res =>可以理解为function(res),其中res即为返回的数据结果对象,不知道又是哪新出的语法规则(后来补充,这个是ES6的箭头函数,https://blog.youkuaiyun.com/zjw_python/article/details/80880208)

app.js

App({
  onLaunch: function () {
    // 展示本地存储能力
    var logs = wx.getStorageSync('logs') || []
    logs.unshift(Date.now())
    wx.setStorageSync('logs', logs)

    // 登录
    wx.login({
      success: res => {
      }
    })
    // 获取用户信息
    wx.getSetting({            
      success: res => {
        if (res.authSetting['scope.userInfo']) {
          // 已经授权,可以直接调用 getUserInfo 获取头像昵称,不会弹框
          wx.getUserInfo({
            success: res => {
              // 可以将 res 发送给后台解码出 unionId
              this.globalData.userInfo = res.userInfo
              
              // 由于 getUserInfo 是网络请求,可能会在 Page.onLoad 之后才返回
              // 所以此处加入 callback 以防止这种情况
              if (this.userInfoReadyCallback) {
                this.userInfoReadyCallback(res)
              }
            }
          })
        }
      }
    })
  },
  globalData: {
    userInfo: null,
  }
})

index.js

/index.js
//获取应用实例
const app = getApp()

Page({
  data: {
    motto: '欢迎使用迷你计算器',
    userInfo: {},
    hasUserInfo: false,
    canIUse: wx.canIUse('button.open-type.getUserInfo')
  },
  //事件处理函数
  bindViewTap: function() {
    wx.navigateTo({
      url: '../logs/logs'
    })
  },
  
  onLoad: function () {
    if (app.globalData.userInfo) {
      this.setData({
        userInfo: app.globalData.userInfo,
        hasUserInfo: true
      })
    } else if (this.data.canIUse){
      // 由于 getUserInfo 是网络请求,可能会在 Page.onLoad 之后才返回
      // 所以此处加入 callback 以防止这种情况
      app.userInfoReadyCallback = res => {
        this.setData({
          userInfo: res.userInfo,
          hasUserInfo: true
        })
      }
    } else {
      // 在没有 open-type=getUserInfo 版本的兼容处理
      wx.getUserInfo({
        success: res => {
          app.globalData.userInfo = res.userInfo
          this.setData({
            userInfo: res.userInfo,
            hasUserInfo: true
          })
        }
      })
    }
  },

  getUserInfo: function(e) {
    console.log(e)
    app.globalData.userInfo = e.detail.userInfo
    this.setData({
      userInfo: e.detail.userInfo,
      hasUserInfo: true
    })
  }
})

首先执行的是app.js的wx.getUserInfo,这个是获取用户信息的网络请求,由于其返回结果不知道在index页面加载完成之前还是之后完成,因此分为两种情况:

  • 在index页面加载完成之前返回:此时优先执行app.js中success函数的代码,app.globalData.userInfo就保存了用户信息。运行到这里时,由于userInfoReadyCallback函数是在index.onload中定义的,因此此时该函数并没有被定义,所以不执行该函数。之后执行index.js中onload中的代码,执行第一个if分支,赋值给页面的userInfo和hasUserInfo
 if (this.userInfoReadyCallback) {
       this.userInfoReadyCallback(res)
    }
  • 在index页面加载完成之后返回:此时优先执行index.js中onload中的代码,由于用户信息还没有返回,所以app.globalData.userInfo为null,执行第二个if分支,定义userInfoReadyCallback函数。随后数据被返回,执行success的代码,app.globalData.userInfo在此时才保存了用户的信息,并执行userInfoReadyCallback函数,赋值给页面的userInfo和hasUserInfo

因此总体来说userInfoReadyCallback函数的作用,就是保证页面的userInfo和hasUserInfo被正确赋值,无论用户信息在页面加载完成之前还是之后返回。


如果觉得这篇文章帮助了您,请打赏一个小红包鼓励作者继续创作哦!!!

在这里插入图片描述

小程序开发中云函数的应用 在做小程序开发的时候,当你创建小程序时会看到一个使用云开发的选项,说白了就是提供我们一个云服务器,在里面可以实现一些服务端的复杂操作,下面小千就来教大家如何去使用云函数进行小程序的开发。 创建目录与云函数 第一步,在微信开发者工具中创建目录与新建nodejs云函数 接下来,需要将此目录在project.config.json中进行配置: “cloudfunctionRoot”: “./cloudfunction/” 如图所示,就有这样的一个云开发目录了:(不要忘记,在目录右键选择你当前环境哦_) 然后我 阅读详情

相关推荐

Mixly/Arduino实战:WS2812点阵动态显示自定义图案与汉字

本文手把手教你使用Mixly和Arduino驱动WS2812点阵屏,实现自定义图案与汉字的动态显示。内容涵盖硬件连接、取模软件设置、高效数据处理技巧(巧用Excel)、Mixly图形化编程及Arduino代码解析,并深入探讨动态显示与滚动汉字原理,最后提供常见问题排查与性能优化心得,助你从零开始轻松玩转智能硬件。

weixin_29185199的博客 454

请教!微信小程序中用到的 res => 是什么?

请问下列代码中: 1、res=>是什么? 2、app.userInfoReadyCallback不象是一个回调函数呀,这是具体名称的回调函数,还是自自义的回调函数 3、wx.canIUse()的用法,可否详细说明一下 index.js代码如下: //获取应用实例 constapp=getApp() Page({ data:{ motto:'HelloWo...

liuji0517的博客 1万+

Cesium中实现GPU计算的泥石流地形侵蚀

通过模拟分析,可以提前识别可能发生泥石流的区域,为防灾减灾提供依据,及时发布预警,避免或减少人员伤亡和财产损失。:在建设公路、桥梁、水库等基础设施时,通过泥石流模拟分析,可以预测泥石流可能对这些设施的影响,帮助工程设计者采取合适的防护措施,确保设施的安全性。:模拟分析有助于为灾后救援工作提供科学依据,确定受灾区域的范围、救援难度等,为救援队伍制定合理的行动方案,提升救援效率。:泥石流是山区常见的地质灾害之一,通过模拟分析可以评估某一地区发生泥石流的风险,指导土地使用规划、人口迁移等决策。

weixin_43481439的博客 1320

Vue--数据请求

数据请求 (1) vue-resource请求 从vue的2.0开始,作者说:vue-resource不再维护了 (2) fetch请求(规范) why: XMLHttpRequest 是一个设计粗糙的 API,配置和调用方式非常混乱, 而且基于事件的异步模型写起来不友好。 查看兼容性: https://caniuse.com/#search=fetch 兼容性不好 polyfill: https://github.com/camsong/fetch-ie8 1 //get 2 fetch("**").

郑怪兽 508

Hypack 应用于地形测量的高级设置操作要领

Hypack 是业界公认最好的水文导航测量软件,是目前世界上应用广泛的专业测量疏浚软件。它能够接收,处理,存储和输出各种数据。Hypack支持绝大部分GPS,测深仪(国内如海鹰HY1603单波束测沙仪),多波束测深仪,旁扫声纳,涌浪补偿器,水位仪,验潮仪以及声速剖面仪。利用 Hypack 可以进行导航,单波束测量,多波束测量,旁扫测量以及疏浚实时监测等。软件界面友好,使用方便。本文简要阐述Hypack 应用于地形测量的几个重要操作要领。

中游鱼的博客 2794

Gazebo仿真平台模型搭建与修改

ROS里踩过的坑(一)Gazebo仿真平台模型搭建与修改文件讲解Models 文件World文件Launch文件模型编辑可视化编辑配置文件编辑模型展示如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出...

Redglass的博客 1万+

【前端】ES6的箭头函数

这个是ES6的箭头函数,res =>可以理解为function(res) 箭头函数的最大好处就是省略了var that=this 从而将this改为静态。 var 函数名 = 参数名 => 返回值; var f = v => v; //等同于 var f = function(v){ return v; }; 如果不需要参数或有多个参数,要使用圆括号 var f = () => 5; var sum = (num1,num2) => num1+num2; .

瑞新の博客:bennyrhys 1267

VN1640 CH5 I/O通道终极指南:【从硬件原理—>工程实战—>自动化测试实战】

摘要:本文详细解析Vector VN1640 CH5 I/O通道的硬件原理与工程应用,涵盖模拟输入(AIN)、数字输入(DIN)和数字输出(DOUT)三大功能模块的配置指南。通过硬件隔离设计实现高精度信号采集与驱动控制,重点分析开漏输出特性及保护机制。提供PWM控制、ECU上电时序测试、传感器闭环控制等实战案例的CAPL脚本代码,并强调多设备同步采集的精准性(时间偏差<1µs)。适用于汽车电子HIL测试、ECU信号监测等场景,所有方案均通过实际项目验证。

汽车控制器系统开发、VIL测试、HIL测试、MIL测试、EMS电喷系统标定与开发、热管理系统标定 759

微信小程序quickstart项目中有关userInfoReadyCallback的解释

userInfoReadyCallback 在index.js中定义,在app.js中使用 附app.js代码: //app.js App({ onLaunch: function () { // 展示本地存储能力 var logs = wx.getStorageSync('logs') || [] logs.unshift(Date.now()) wx.s

yangshuolll的专栏 1万+

QT应用编程: Win10系统下QT5.12搭建Android开发环境(配件齐全)

在win10系统下,搭建QT5.12.6 的Android开发环境。

7688

ExpressLRS(ELRS)接收机技术全景:从历史演进、技术底层到产业生态全解析——上

ExpressLRS(ELRS)是一种由全球开源社区驱动的双向射频遥控链路协议栈,其接收机作为核心终端,承担信号接收解调、遥控指令解析、飞控数据交互与遥测回传等关键功能。自2018年问世以来,ELRS凭借极致性能、低成本、开放生态和强兼容性,从航模DIY方案发展为消费级无人机领域的事实标准,并逐步渗透工业级场景。 ELRS接收机采用模块化分层架构,支持2.4GHz和900MHz双频段,通过LoRa、FLRC、FSK多调制模式实现低延迟与远距离平衡。其核心技术包括自适应跳频抗干扰、TDD双向链路和极简数据包。

bother3000的博客 303

关于微信小程序Demo中的userInfoReadyCallback

这里用一个例子说明 实验目的: 1、app中获取用户信息 2、页面中显示 这演示的是已经授权,可以直接调用getUserInfo,这样简洁代码,突出重点 ----------------------错误示范-------------------------- 应用【app.js】 onLaunch: function () { wx.getUserInfo({ suc...

neo_Wordsworth的博客 466

31、车载通信中的可见光通信(VLC)技术解析

本文详细解析了车载通信中可见光通信(VLC)技术的应用背景、优势及发展前景。对比传统RF通信技术(如DSRC),VLC利用LED照明设备实现高效、安全的车辆与车辆、车辆与基础设施之间的通信,具有频谱资源丰富、安全性高、无电磁干扰等优势。文章还探讨了VLC在交叉口交通控制、高速公路通信、自动驾驶等场景的应用潜力,展望了其在未来智能交通系统中的重要作用。

hill8的博客 318

《微信小程序系列》userInfoReadyCallback

wx.getUserInfo({ success: res =&gt; { console.log('getUserInfo success:', res); // 可以将 res 发送给后台解码出 unionId this.globalData.userInfo = res.userInfo // 由于 getUse...

客随他乡 1854

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

微信小程序开发采坑记录1

问题1: 在微信小程序开发过程中,在获取userinfo或其他异步处理函数的过程中采用this碰到一些问题,问题如下: 我的login的success回调函数如下: success: function(res) { if(res.statusCode == 200) { console.log(res.data) ...

u011220960的博客 1640

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

微信小程序健康运动项目开发全流程指南

微信小程序作为一种轻量级应用开发框架,通过WXML、WXSS和JavaScript技术栈实现跨平台移动应用。其核心原理基于微信客户端提供的原生组件和API接口,结合云开发能力简化后端部署。在健康运动领域,小程序技术价值体现在便捷的用户数据采集、实时运动监测和个性化健康管理。通过调用微信运动API获取步数、距离等数据,结合云数据库实现用户信息管理和运动记录存储。应用场景包括日常运动追踪、健康指标监测和健身计划制定,为计算机专业毕业设计提供完整的技术实现方案。本文基于微信小程序云开发和Node.js后端技术,详

weixin_34054931的博客 305

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

微信小程序

开发准备工作获取微信小程序的 AppID登录 https://mp.weixin.qq.com ,就可以在网站的“设置”-“开发者设置”中,查看到微信小程序的 AppID 了,注意不可直接使用服务号或订阅号的 AppID 。 下载开发工具下载地址:https://mp.weixin.qq.com/debug/wxadoc/dev/devtools/download.html?t=147619748...

LL520LAN的博客 857

微信小程序生命周期

虽然说onLaunch在onLoad之前执行,但是在onLaunch里请求获取是否有权限,等待返回值的时候Page里的onLoad事件就已经执行了。 解决办法: 在APP里面onLanch中的网络请求中设置判断 if (this.userInfoReadyCallback) { this.userInfoReadyCallback(res) } 在page的onLoad中设置一个回调 a...

Cvory 6237

学习小程序整理

1 三大文件 .js后缀的是脚本文件,.json后缀的文件是配置文件,.wxss后缀的是样式表文件2app.js :监听并处理小程序的生命周期函数、声明全局变量 例//app.js App({ onLaunch: function () { // 展示本地存储能力 var logs = wx.getStorageSync('logs') || [] logs.uns

xiyangyang8110的博客 1981

小程序之用户授权(即对小程序新建后自带的代码分析)

小程序之用户授权(即对小程序新建后自带的代码分析) 相信很多朋友对小程序新建完自带的代码表示很懵逼,其实里面最主要的部分就是用户授权方面,所以我在这里谈谈小程序用户授权文章,帮助大家理解。 需求 通过用户授权获取用户信息 建议还不了解的同学先看下面的代码部分(为小程序创建后自带代码+我的注释),这个部分是对代码的解读 第一次进入小程序 第一次进入小程序,此时小程序还未获得我们的授权,而判断我们是...

furfur-jiang的博客 1291

微信小程序开发使用=>生命周期钩子函数

在微信小程序开发中,讲解对各个环节 生命周期 钩子函数的用法及作用。

如果巅峰留不住,那就重走来时路! 1198

微信小程序使用函数的三种方法

使用app.js内定义的函数。函数写在util.js页面。使用来自不同页面的函数。

血色天空的专栏 5227

对接后端接口时success: (res)=>中的res是什么意思?

对接后端接口时success: (res)=>中的res是什么意思? res这个参数可以理解为一个Object。 res.data指服务器返回的内容。res参数还有其他的属性,比如statusCode(指开发者服务器返回的 HTTP 状态码),还有header(指开发者服务器返回的 HTTP Response Header)。 ...

SunFlower的博客 9492

小程序中 function (res)的理解

res =>可以理解为function(res)。 例子: success: res =>  {  ……  } 可以理解为success:function(res){……} 两者的区别: this作用域的问题。 function(res)里,this指向是正确的; res=>里,this指向function本身。 解决办法:let that = this ...

与光的博客 1万+

js中function (res) {}与(res) =>{}的区别

这里是引用 function (res) {} 中 打印this时是undefined 打印that时是有内容的 let that = this; getTotal().then(function (res) { console.log(this); console.log(that); this.totalData = res.body.content; this.total = res.body.total;.

qq_40121328的博客 8712
上一篇: Flex 弹性盒子布局
下一篇: Django开发微信小程序之逆波兰计算器(一) 整体介绍
PAT-python-zjw
博客等级 码龄10年 381粉丝 408原创
评论 5
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值