小程序的数组赋值问题
发布于 5 年前 作者 jie67 19731 次浏览 来自 问答

我通过封装一个搜索附近酒店函数(getnearHotel())来达到重复利用的目的,但是函数的返回值赋值时,出现undefined错误。

具体如下:

1.自己封装函数,中间的req.request是又封装过一次的,req.request(参数1:访问路径,参数2:传入的值,参数三:请求成功的响应函数,…)

控制台打印的res的值

2.新建变量接收函数的返回值,同时打印测试其值

接收返回值

★通过结果发现,出现undefined错误,我转念一想,会不会是要循环赋值,但我一想到在this.setData中的hotellist:result是可以循环赋值的,为此我又进行了如下的测试

1.我通过判断函数的返回值是否存在,来设置hotellist的值

其控制台的输出结果如下:

问题1:为什么我不能通过函数的返回值来设定page中的data值?

问题2:是否只有通过this.setData({ lists:res })的方式才能动态的设置值,那意思是函数的返回值是一个数组时,是不能直接通过var result = getnearHotel()  //某函数的返回值     接收?

本人刚接触小程序没多久,很多白痴地方望大家帮忙看看,解答解答~

10 回复

我也遇到了这个问题,但是回调函数那里还是不太会写

求指点!

我的意思是,你给你的getnearHotel传一个回调函数,在回调函数中执行setData

样例:

方法调用处——

var that=this;
getnearHotel(function(res){
    that.setData({
       hotellist:res
    })
})

调用的方法——

function getnearHotel(callback){
    wx...({
        success:function(res){
            request(function(res){
                typeof callback == "function" && callback(res)
            })
        }
    })
}

大概的意思,要是再不明白我就没招了

这里有个问题,你的函数中存在request异步请求,这种情况下基本上你的请求还没有返回就接着往下执行了

所以你应该通过回调函数来更新数据,而不是用函数的return

没封装函数前,我是直接通过success的回调函数来更新数据的,但后来我发现在另外一个地方,我需要一个同样的步骤来获取附近的酒店,为此我才想把这个步骤封装成一个函数方便调用,因为这个函数是定义在page外的,是不能调用this.setData()方法的,所以我才要把查询的结果返回,用参数接收,然后在page中设值。

一样的问题,其实可以这么赋值,前提是你的函数里没有异步方法

假如这是你自己的封装的js,你在其中添加了一个方法

//测试回调function testCallBack(callBack){  var test = “test data”;  (typeof (callBack) === ‘function’)&& callBack(test);}

//将该方法开放,提供给外部引用    module.exports = {    testCallBack: testCallBack,  }

//这种自己封装的文件一般在page之前引用 var requests = require(’…/…/requests/request.js’);  //然后只需要在你想调的地方直接通过自定义的变量(例如:requests)直接引用即可,传的参数与自己封装的要一一对应 requests.testCallBack(function(res){      console.log(res);    });

厉害了~刚刚试了下已经可以了

抱拳了~老铁

懂了,第二个问题也是同样的问题吗?都是在数据还没得到就加载了,导致页面显示不出数据吗?

不管是var result = getnearHotel(),还是事先定义result,得到的结果都是undefined…

回到顶部