小程序
小游戏
企业微信
微信支付
扫描小程序码分享
我想在app.js里用接口获取一个参数,用到page里面,显示在页面上,但是每次页面加载完了,app.js才获取到参数,这怎么办呢??
页面onLoad时,数据接口还没执行完,没有数据,获取不到
11 个回答
加粗
标红
插入代码
插入链接
插入图片
上传视频
没必要用定时器,可以加一个回调函数
例如:
if
(app.xxx) {
//判断有没有你要的 没有说明还没返回或者是失败了
//操作略
}
else
{ //这个是时候我们在app的config里定义一个函数 给请求成功后调用
app.callback = () => {
//操作略 这个和上面的操作是一样的
};
app请求返回成功里这样写
(
this
.callback) {
//这个函数名字和你定义的一样即可
.callback()
//执行定义的回调函数
希望你能够看明白,
你好,麻烦通过点击下方“反馈信息”按钮,提供出现问题的。
那你知道你这样写,直到app.js执行完成你写的会执行多少次吗
一次啊
那我要是长时间没有执行完成呢,如果你还是执行一次那就比我的方法好,你是验证过可以吗?
如果你是进入page前完成了 ,你在page里也不会设置这个回调,如果你已经进入了page,发现异步还没有完成就设置这个回调,让异步完成后执行
1、wxml
2、wxss
3、显示效果,想问下为啥 搜索的 icon 出不来呢? 还望多多指教
为什么会有人说定时器这种蠢方法
不是没必要 而是不能用 不单影响性能 处理不好更有内存泄露
es6的Promise不好用么 再不行就是订阅者不可以么
那比如说我的appjs里面是需要做多种判断后才能取得最后的值,比如说a存在那我的值为a,a不存在调接口b,b的返回值再来判断最终取值c或者d,这样的如何用promise呀
所有的内部逻辑不需要管 反正只要为所有的判断最终路线后返回一个Promise就行
无论你判断多深多复杂 只需这个方法最终返回的一定是个Promise就行了
页面上直接等待这个Promise完成 页面不需要知道你内部做了几万个判断
包成promise,把这个promise放在全局变量里,在page里使用这个promise
接口promise化,用async/await才是这个问题的有效解决办法吧
为什么还要用这种代码去解决
多谢,完美解决
没必要用setinerval,可能会引起各种未知问题,弄一个回调函数
我用的定时为什么会报参数未定义?是在page的js里面写嘛?用回调函数怎么写?
兄弟 用回调可以参照我回答的那个例子
用定时器来循环判断,直到值被改变了才开始加载page
怎么加了个先生。。有人喊你陈妹子吗。。。
你不说还好,你一说我都感觉怪怪的
啧。。陈妹子你好。。
.......我很想让你见识一下红色的感叹号
高跟鞋的脚印吗
这种问题一般都是需要一些app开始时候从网络请求的数据来更新页面内容,但页面渲染提前了。可以专门约定一个每个page都有的page.render()函数来渲染页面,如果发现需要的数据还没有ready干脆什么都不做,由app.onLoad在网络请求成功之后直接getCurrentPages,调用page.render就完事了。
优雅点的做法是用事件订阅,自己搞个EventBus,类似的方案很多。
小程序的新建范例里面就有回调函数的用法:
onLoad:
function
() {
console.log(
'index page on load log:'
+ Date());
(app.globalData.userInfo) {
.setData({
userInfo: app.globalData.userInfo,
hasUserInfo:
true
})
.data.canIUse){
// 由于 getUserInfo 是网络请求,可能会在 Page.onLoad 之后才返回
// 所以此处加入 callback 以防止这种情况
app.userInfoReadyCallback = res => {
userInfo: res.userInfo,
//不过我还不明白app.userInfoReadyCallback这个值是从哪来的?
promise、eventbus都可以解决
正在加载...
关注后,可在微信内接收相应的重要提醒。
请使用微信扫描二维码关注 “微信开放社区” 公众号
没必要用定时器,可以加一个回调函数
例如:
if
(app.xxx) {
//判断有没有你要的 没有说明还没返回或者是失败了
//操作略
}
else
{ //这个是时候我们在app的config里定义一个函数 给请求成功后调用
app.callback = () => {
//操作略 这个和上面的操作是一样的
};
}
app请求返回成功里这样写
if
(
this
.callback) {
//这个函数名字和你定义的一样即可
this
.callback()
//执行定义的回调函数
}
希望你能够看明白,
那你知道你这样写,直到app.js执行完成你写的会执行多少次吗
一次啊
那我要是长时间没有执行完成呢,如果你还是执行一次那就比我的方法好,你是验证过可以吗?
如果你是进入page前完成了 ,你在page里也不会设置这个回调,如果你已经进入了page,发现异步还没有完成就设置这个回调,让异步完成后执行
1、wxml
2、wxss
3、显示效果,想问下为啥 搜索的 icon 出不来呢? 还望多多指教
为什么会有人说定时器这种蠢方法
不是没必要 而是不能用 不单影响性能 处理不好更有内存泄露
es6的Promise不好用么 再不行就是订阅者不可以么
那比如说我的appjs里面是需要做多种判断后才能取得最后的值,比如说a存在那我的值为a,a不存在调接口b,b的返回值再来判断最终取值c或者d,这样的如何用promise呀
所有的内部逻辑不需要管 反正只要为所有的判断最终路线后返回一个Promise就行
无论你判断多深多复杂 只需这个方法最终返回的一定是个Promise就行了
页面上直接等待这个Promise完成 页面不需要知道你内部做了几万个判断
包成promise,把这个promise放在全局变量里,在page里使用这个promise
接口promise化,用async/await才是这个问题的有效解决办法吧
为什么还要用这种代码去解决
多谢,完美解决
没必要用setinerval,可能会引起各种未知问题,弄一个回调函数
我用的定时为什么会报参数未定义?是在page的js里面写嘛?用回调函数怎么写?
兄弟 用回调可以参照我回答的那个例子
用定时器来循环判断,直到值被改变了才开始加载page
怎么加了个先生。。有人喊你陈妹子吗。。。
你不说还好,你一说我都感觉怪怪的
啧。。陈妹子你好。。
.......我很想让你见识一下红色的感叹号
高跟鞋的脚印吗
这种问题一般都是需要一些app开始时候从网络请求的数据来更新页面内容,但页面渲染提前了。可以专门约定一个每个page都有的page.render()函数来渲染页面,如果发现需要的数据还没有ready干脆什么都不做,由app.onLoad在网络请求成功之后直接getCurrentPages,调用page.render就完事了。
优雅点的做法是用事件订阅,自己搞个EventBus,类似的方案很多。
小程序的新建范例里面就有回调函数的用法:
onLoad:
function
() {
console.log(
'index page on load log:'
+ Date());
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
})
}
//不过我还不明白app.userInfoReadyCallback这个值是从哪来的?
promise、eventbus都可以解决