微信扫码登录

其他登录方式

绑定手机号

注册

我同意用户协议

忘记密码

用户协议

绑定手机号

  • 推广与合作

小程序丨有人遇到过_this.setData is not a function报错吗

来源: 1781

代码如下,报错地方代码为红色标注出来的部分:

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.setData is not a function报错吗

然后把报错部分的this也修改成用that替换,还是报错

有人遇到过_this.setData is not a function报错吗

网友回复:

Y***:

声明个  var self = this   然后再逻辑判断里面用  self.setData 试试

R***:

异步 定义一个变量存储this

回***:

@Remember_BTW火羊x2~ 定义了的,有人遇到过_this.setData is not a function报错吗

离***:

定义一个变量that=this

回***:

@离乄殇 定义了的。。。有人遇到过_this.setData is not a function报错吗

回***:

@离乄殇 而且开始就只在请求回来以后才用的that替换this,后面把定时器里面的this也用that替换以后还是不行有人遇到过_this.setData is not a function报错吗

Y***:

在定时器里用this肯定是不行的,至于为什么用that也不行,目前不清楚

回***:

问题解决了,是我写的时候没有用心,我在出错的前面把that.setData输出在控制台中就找到问题了是我后面有一个地方改变了that.setData方法。无论怎样还是谢谢@离乄殇 @Remember_BTW火羊x2~ 你们的热心解答

Y***:

我用你的代码来测,this是可以的

 let timer=setInterval(()=>{

如果改成

let timer=setInterval(function(){

用this不行,用that可以


回***:

@YJFn 是的,这里定时器是用的es6的箭头函数

爱盈利(aiyingli.com)移动互联网最具影响力的盈利指导网站。定位于服务移动互联网创业者,移动盈利指导。我们的目标是让盈利目标清晰可见!降低门槛,让缺乏经验、资金有限的个人和团队获得经验和机会,提高热情,激发产品。

评论

相关文章推荐

京ICP备15063977号-2 © 2012-2018 aiyingli.com. All Rights Reserved. 京公网安备 11010102003938号