请问下列代码中:
1、res => 是什么?
2、app.userInfoReadyCallback 不象是一个回调函数呀,这是具体名称的回调函数,还是自自义的回调函数
3、wx.canIUse()的用法,可否详细说明一下
index.js 代码如下:
//获取应用实例
const app = getApp()
Page({
data: {
motto: 'Hello World',
userInfo: {},
hasUserInfo: false,
canIUse: wx.canIUse('button.open-type.getUserInfo')
},
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
})
}
})[/b]
=>是箭头函数
https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Functions/Arrow_functions
非常感谢。其他两个问题,可否给解答一下。
canIuse顾名思义就是‘’能不能用‘’;你在里面传入参数,微信支持传3种参数形式.. 返回的是布尔值.
// 对象的属性或方法 传这几个是检查一下当前用户的基础库版本是不是支持这几个方法,
wx.canIUse('console.log')
wx.canIUse('CameraContext.onCameraFrame')
wx.canIUse('CameraFrameListener.start')
wx.canIUse('Image.src')
// wx接口参数、回调或者返回值 传这个就是查询一下当前用户的版本是不是支持wx的这几个开放接口,
wx.canIUse('openBluetoothAdapter')
wx.canIUse('getSystemInfoSync.return.safeArea.left')
wx.canIUse('getSystemInfo.success.screenWidth')
wx.canIUse('showToast.object.image')
wx.canIUse('onCompassChange.callback.direction')
wx.canIUse('request.object.method.GET')
// 组件的属性 传这种参数就是查询一下用户当前的版本是不是支持微信提供的这几个组件。
wx.canIUse('live-player')
wx.canIUse('text.selectable')
wx.canIUse('button.open-type.contact')
你这个代码用的canIuse 意思是:查询一下小程序用户当前的版本是否支持用button获取用户的信息。
你的那个第二个问题,应该是一个自定义函数。
非常感谢。还需要请教一下:
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
})
}
})
}
}
此处的 app.userInfoReadyCallback = res => {} 是一个回调函数,我怎么看也看不懂是一个回调函数呢,可否详解讲解一下。
app.userInfoReadyCallback = res => {}
等同
app.userInfoReadyCallback = function(res) {}
看习惯了就好了,我一开始也一下反应不过来 x=>x*x 这是一个完整的求平方函数
非常感谢。您是说 app.userInfoReadyCallback 这种格式 是直接 给app添加了一个 userInfoReadyCallback 对象 方法,对吗? 可是谁来调用它呢,它又跟什么事件绑定呢?
其实你可以把 userInfoReadyCallback 看成是app中提供的事件。
就与 window.onload = function() { } 类似。
onload是当页面加载完成后由浏览器自动调用。
userInfoReadyCallback也是类似的,当用户信息准备好后由app自动调用。
非常感谢。您是说 userInfoReadyCallback 不是程序开发人员自定义的属性方法, 而是 APP 内定的一个属性函数 ?
1、res =>{},网上搜索js箭头函数有很多说明
2、wx.canIUse用法为wx.canIUse('aaa'),其中aaa为api名称,如果该api受支持返回true,否则返回false
3、userInfoReadyCallback 是开发人员自定义的函数,可以在app.js中看到
非常感谢,但是 APP中没有 userInfoReadyCallback 的定义呀,app.js代码如下:
//app.js
App({
onLaunch: function () {
// 展示本地存储能力
var logs = wx.getStorageSync('logs') || []
logs.unshift(Date.now())
wx.setStorageSync('logs', logs)
// 登录
wx.login({
success: res => {
// 发送 res.code 到后台换取 openId, sessionKey, unionId
}
})
// 获取用户信息
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
}
})
在页面的onload中定义了,然后在app.js调用的
app.userInfoReadyCallback = res => {
this.setData({
userInfo: res.userInfo,
hasUserInfo: true
})
}这段就是定义这个函数的
非常感谢。但是,index.js 中的 userInfoReadyCallback = res => {
this.setData({
userInfo: res.userInfo,
hasUserInfo: true
})
}
能早于 app.js 加载 吗?
好像有一点区别
=>{} 是没有this的
不能早于app.js加载,app.js是整个程序的入口
非常感谢。那既然INDEX.JS不能早于APP.js加载,那 userInfoReadyCallback 这个属性函数如果 在 INDEX.JS加载前运行,那如何运行?
运行不了,因为index.js还没有加载这个函数还没有定义
非常感谢,那为什么 userInfoReadyCallback 这个属性函数 的定义 不直接放在 APP中,而要放在 INDEX.JS中
为了判断异步获取信息是否成功,资源代下载成功了才会执行这个函数。
怎么感觉你这个帖子不是一个帖子啊,是个无限连环帖啊!