代碼如下,報(bào)錯(cuò)地方代碼為紅色標(biāo)注出來(lái)的部分:
sendMsg:function(){
let that = this;
let time=60;
/*改變按鈕可點(diǎn)擊狀態(tài) */
this.setData({
isSend:false
});
/* 倒計(jì)時(shí) */
let timer=setInterval(()=>{
if(time==0){
clearInterval(timer);
this.setData({
isSend:true,
sendMsg:'重新發(fā)送'
});
}else{
time--;
this.setData({
isSend:false,
sendMsg:time+'秒后重新發(fā)送'
});
}
},1000);
/* 發(fā)送短信 */
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:'重新發(fā)送'
});
}
}else{
clearInterval(timer);
that.setData({
isSend:true,
sendMsg:'重新發(fā)送'
});
}
},
fail:function(res){
clearInterval(timer);
that.setData({
isSend:true,
sendMsg:'重新發(fā)送'
});
}
});
}
報(bào)錯(cuò)如下:
然后把報(bào)錯(cuò)部分的this也修改成用that替換,還是報(bào)錯(cuò)
網(wǎng)友回復(fù):
聲明個(gè) var self = this 然后再邏輯判斷里面用 self.setData 試試
異步 定義一個(gè)變量存儲(chǔ)this
@Remember_BTW火羊x2~ 定義了的,
定義一個(gè)變量that=this
@離乄殤 定義了的。。。
@離乄殤 而且開(kāi)始就只在請(qǐng)求回來(lái)以后才用的that替換this,后面把定時(shí)器里面的this也用that替換以后還是不行
在定時(shí)器里用this肯定是不行的,至于為什么用that也不行,目前不清楚
問(wèn)題解決了,是我寫(xiě)的時(shí)候沒(méi)有用心,我在出錯(cuò)的前面把that.setData輸出在控制臺(tái)中就找到問(wèn)題了是我后面有一個(gè)地方改變了that.setData方法。無(wú)論怎樣還是謝謝@離乄殤 @Remember_BTW火羊x2~ 你們的熱心解答
我用你的代碼來(lái)測(cè),this是可以的
let timer=setInterval(()=>{
如果改成
let timer=setInterval(function(){
用this不行,用that可以
@YJFn 是的,這里定時(shí)器是用的es6的箭頭函數(shù)