网络连接管理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
按赞同
/
按时间
l634youngpig

方式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
相关问题
获取当前网络连接能力
285浏览 • 1回复 待解决
获取netHandle网络连接信息
212浏览 • 1回复 待解决
对象函数的this如何指向外层
618浏览 • 1回复 待解决
网络地址建立socket连接
239浏览 • 1回复 待解决
连接网络信息获取有好的方案吗?
277浏览 • 1回复 待解决
网络请求创建后,持久化问题
230浏览 • 1回复 待解决
状态管理相关问题,有人知道吗?
355浏览 • 1回复 待解决
Navigation管理多页面堆栈太多问题
502浏览 • 1回复 待解决
openharmony 基于arkts的socket连接问题
2319浏览 • 1回复 待解决
popup组件气泡框指向颜色怎么修改?
5566浏览 • 1回复 待解决
mysql左连接的一个问题
1065浏览 • 1回复 待解决