网络连接管理connection中this指向问题

在网络管理模块connection中,按照开发文档的示例代码,在调用connection.hasDefaultNet函数时,其回调函数中使用this.xxx时,会发生异常。如下图所示:

checkInterNetInfo() { 
  connection.hasDefaultNet().then(function (has) { 
    if (has) { 
      this.message = "网络正常"; 
    } else { 
      this.message = "网络异常" 
    } 
  }).catch((err) => { 
    console.info("check internet error: " + err) 
  }) 
}

当代码执行到“this.message="网络正常"”或者“this.message="网络异常"”时,会发生异常,并进入catch中。这并不是期待的结果。究其原因,是this指向的问题导致的。在then()函数中使用匿名函数function(has){}等方式时,在function函数体中this指向的是函数本身,并非全局对象,从而导致异常。

HarmonyOS
2024-05-28 20:27:41
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
越来越认真了

方式1:使用箭头函数表示。例如将then()中传入的回调函数改为使用箭头函数表示

checkInterNetInfo() { 
  connection.hasDefaultNet().then((has) => { 
    if (has) { 
      this.message = "网络正常"; 
    } else { 
      this.message = "网络异常" 
    } 
  }).catch((err) => { 
    console.info("check internet error: " + err) 
  }) 
}

方式2:改变this指向,使其指向正确的对象。如下所示:

checkInterNetInfo() { 
  let _this = this; 
  connection.hasDefaultNet().then(function (has) { 
    if (has) { 
      _this.message = "网络正常"; 
    } else { 
      _this.message = "网络异常" 
    } 
  }).catch((err) => { 
    console.info("check internet error: " + err) 
  }) 
}

说明:

开发文档中connection示例代码链接如下:gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/reference/apis/js-apis-net-connection.md

该模块下的接口信息多为异步返回结果,在使用时皆需注意this指向的问题

分享
微博
QQ
微信
回复
2024-05-29 21:28:20
相关问题
HarmonyOS 网络连接监听问题
51浏览 • 1回复 待解决
获取当前网络连接能力
824浏览 • 1回复 待解决
获取netHandle网络连接信息
641浏览 • 1回复 待解决
HarmonyOS rcp创建connection连接
2浏览 • 1回复 待解决
HarmonyOS this指向问题
45浏览 • 2回复 待解决
HarmonyOS this指向问题
8浏览 • 1回复 待解决
connection.getDefaultNetnetID取值的咨询
303浏览 • 1回复 待解决
网络地址建立socket连接
762浏览 • 1回复 待解决