关于在 微信API内 设置DATA参数的问题
发布于 6 年前 作者 weipeng 7761 次浏览 最后一次编辑是 5 年前 来自 问答

问题是这样的。利用微信的位置获取API(wx.getLocation())函数,在监听SUCCESS成功函数内,得到了返回值后,将返回值赋值到 this.data 对象内的 属性。但是出现了这种情况,很无解。

//index.js

//获取应用实例
var app = getApp();
var conf = require('../../conf/conf.js');
Page({
 data: {
   motto: 'Hello World',
   latitude: '',
   longitude: ''
 },
 onLoad: function () {
   var that = this
   that.getLocationInfo()
   console.log("我是第20行DEBUG:"+that.data.longitude+","+that.data.latitude)
   console.log("我是motto:"+that.data.motto)
 },
 //获得天气信息
 getWeaterInfo: function(lon,lat) {
   var that = this
   console.log("我是第33行DEBUG:"+that.data.longitude+","+that.data.latitude)
 },
 //获得地址信息
   getLocationInfo: function() {
     var that = this
     wx.getLocation({
       type: 'wgs84',
       success: function(locationInfo){
         that.data.latitude = locationInfo.latitude
         that.data.longitude = locationInfo.longitude
         that.getWeaterInfo(locationInfo.longitude,locationInfo.latitude)
       }
     })
   }
})

流程如下:

1.页面加载后,调用  that.getLocationInfo()
2.在 getLocationInfo() 函数内,使用了 wx.getLocation API,在 SUCCESS 函数内,进行了 this.data 以及 一个函数调用 that.getWeaterInfo()
3.调用函数that.getWeaterInfo(),直接输出了值。这里显示的值是正常的。
4.当函数执行完毕,运行到第20行时候,再次打印 this.data 内的经纬度数值,发现变为空的了。
5.但是 this.data.motto 的数值打印了,不是空的。

疑问:
1.所有API的返回值只能在SUCCESS范围内有效吗?若需要赋值给 this.data 该怎么做?
2.能解释下吗?谢谢


备注:

探究了一会,以为是对象(this)问题。修改了代码如下:

//index.js
//获取应用实例
var app = getApp();
var conf = require('../../conf/conf.js');
Page({
 data: {
   motto: 'Hello World',
   latitude: '',
   longitude: ''
 },
 onLoad: function () {
   var that = this
   this.getLocationInfo(that)
   console.log("我是第20行DEBUG:"+that.data.longitude+","+that.data.latitude)
   console.log("对象一致:"+(that  === this))
   console.log("我是motto:"+that.data.motto)
 },
 //获得天气信息
 getWeaterInfo: function(lon,lat,that) {
   console.log("我是第33行DEBUG:"+that.data.longitude+","+that.data.latitude)
   console.log("对象一致:"+(that  === this))
 },
 //获得地址信息
   getLocationInfo: function(that) {
     wx.getLocation({
       type: 'wgs84',
       success: function(locationInfo){
         that.data.latitude = locationInfo.latitude
         that.data.longitude = locationInfo.longitude
         that.getWeaterInfo(locationInfo.longitude,locationInfo.latitude,that)
       }
     })
   }
})

上面代码,我将 this 复制给了 that 。然后一直传递下去。发现在同一个对象下,之前的问题还是出现了。

究竟是什么原因呢????????????????????

4 回复

同步接口都有带 Sync 后缀

@Can 谢谢,是的。已经解决了我的困惑

对哦,有这个可能。

对了,文档哪里可以看到有说明该接口为异步接口?怎么识别哪些接口为异步(凡是微信API都视为异步请求?).

因为 wx.getLocation 是异步接口,onLoad 中的 console.log 的执行顺序比 success 先

回到顶部