getNextSubject:function(){
var that = this;
checkNextSubject(data =>{
if(data.code == 107){
wx.showModal({
title:"提示",
content: '用户正在参与其他答题请稍后再来',
showCancel:false
})
}else if(data.code == 109 || data.code == 110){
//结束
if (timer) {
clearInterval(timer);
that.setData({
right: true
})
}
wx.showModal({
title:"提示",
content: '本轮答题已经结束,你答对了'+this.data.qaYes+'分',
showCancel:false,
success:function(){
wx.navigateBack({
delta: 0,
})
},
})
}else{
if(data.data){
var numid = data.data.number
var question = data.data.subject
var answer = data.data.optionsList
var tips = data.data.tips
that.setData({
numid:numid,
question:question,
answer:answer,
tips:tips
},cb =>{
console.log("-------------------",cb);
})
}
}
})
},
上面是我的代码,遇到一个很奇葩的问题,第一次进页面这个方法可以正常执行并且可以渲染页面,等我把页面redirect出去后再次进页面这个方法中的setData就不起作用了,添加了回调也不执行,可以确定的是要设置的值都是存在的,
具体是怎么调整了
楼主 有解决的代码案例吗?
感谢大家的回复,已经找到问题并解决,不是程序分支没有执行到,也不是this丢失,这个可能是小程序自身的一个问题,异步回调层级太深,以及上下文不一致就会导致setData无法成功执行,解决办法就是把当前更新ui的逻辑独立出来不要放到回调方法里面然后把page对象当作参数传递进去然后执行更新ui的方法
首先你执行哪个分支无效, 就在哪个分支的setData第二个参数回调打印that.data 看看什么情况
getNextSubject:function 两次都走了没,搞一个log看看
你写了这么多if判断,有没有想过 checkNextSubject 回调data值为空的情况?
你要先确定 getNextSubject 和 checkNextSubject 方法会不会执行
判断语句里面 console.log 下看执行到哪里了