我通过封装一个搜索附近酒店函数(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() //某函数的返回值 接收?
本人刚接触小程序没多久,很多白痴地方望大家帮忙看看,解答解答~
还是不太清楚,https://developers.weixin.qq.com/blogdetail?action=get_post_info&docid=00046a737d09c03e6bb6c15cb51800&token=174651183&lang=zh_CN&comment_lvl=2
这个问题还是解决不了,求解答!!
假如这是你自己的封装的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); });
我也遇到了这个问题,但是回调函数那里还是不太会写
求指点!
厉害了~刚刚试了下已经可以了
抱拳了~老铁
一样的问题,其实可以这么赋值,前提是你的函数里没有异步方法
懂了,第二个问题也是同样的问题吗?都是在数据还没得到就加载了,导致页面显示不出数据吗?
我的意思是,你给你的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)
})
}
})
}
大概的意思,要是再不明白我就没招了
没封装函数前,我是直接通过success的回调函数来更新数据的,但后来我发现在另外一个地方,我需要一个同样的步骤来获取附近的酒店,为此我才想把这个步骤封装成一个函数方便调用,因为这个函数是定义在page外的,是不能调用this.setData()方法的,所以我才要把查询的结果返回,用参数接收,然后在page中设值。
这里有个问题,你的函数中存在request异步请求,这种情况下基本上你的请求还没有返回就接着往下执行了
所以你应该通过回调函数来更新数据,而不是用函数的return
不管是var result = getnearHotel(),还是事先定义result,得到的结果都是undefined....