我通过封装一个搜索附近酒店函数(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() //某函数的返回值 接收?
本人刚接触小程序没多久,很多白痴地方望大家帮忙看看,解答解答~
我的意思是,你给你的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中设值。
假如这是你自己的封装的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); });
