代码如下,报错地方代码为红色标注出来的部分:
sendMsg:function(){
let that = this;
let time=60;
/*改变按钮可点击状态 */
this.setData({
isSend:false
});
/* 倒计时 */
let timer=setInterval(()=>{
if(time==0){
clearInterval(timer);
this.setData({
isSend:true,
sendMsg:'重新发送'
});
}else{
time--;
this.setData({
isSend:false,
sendMsg:time+'秒后重新发送'
});
}
},1000);
/* 发送短信 */
wx.request({
url:'https://XXXXXXXXXXX',
method:'POST',
data: {
'phone': phone
},
header: {
'content-type': 'application/x-www-form-urlencoded'
},
success: function(res) {
if(!!res.data.code || res.data.code==0){
if(res.data.code!=1){
wx.showModal({
title: '提示',
content: res.data.message,
});
clearInterval(timer);
that.setData({
isSend:true,
sendMsg:'重新发送'
});
}
}else{
clearInterval(timer);
that.setData({
isSend:true,
sendMsg:'重新发送'
});
}
},
fail:function(res){
clearInterval(timer);
that.setData({
isSend:true,
sendMsg:'重新发送'
});
}
});
}
报错如下:
然后把报错部分的this也修改成用that替换,还是报错
网友回复:
声明个 var self = this 然后再逻辑判断里面用 self.setData 试试
异步 定义一个变量存储this
@Remember_BTW火羊x2~ 定义了的,
定义一个变量that=this
@离乄殇 定义了的。。。
@离乄殇 而且开始就只在请求回来以后才用的that替换this,后面把定时器里面的this也用that替换以后还是不行
在定时器里用this肯定是不行的,至于为什么用that也不行,目前不清楚
问题解决了,是我写的时候没有用心,我在出错的前面把that.setData输出在控制台中就找到问题了是我后面有一个地方改变了that.setData方法。无论怎样还是谢谢@离乄殇 @Remember_BTW火羊x2~ 你们的热心解答
我用你的代码来测,this是可以的
let timer=setInterval(()=>{
如果改成
let timer=setInterval(function(){
用this不行,用that可以
@YJFn 是的,这里定时器是用的es6的箭头函数