收藏
回答

小程序的数组赋值问题

问题模块
API和组件

我通过封装一个搜索附近酒店函数(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()  //某函数的返回值     接收?


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

最后一次编辑于  2017-12-19  (未经腾讯允许,不得转载)
回答关注问题邀请回答
收藏

11 个回答

  • 无边落木
    无边落木
    2018-05-05

    还是不太清楚,https://developers.weixin.qq.com/blogdetail?action=get_post_info&docid=00046a737d09c03e6bb6c15cb51800&token=174651183&lang=zh_CN&comment_lvl=2

    这个问题还是解决不了,求解答!!

    2018-05-05
    赞同
    回复
  • big stone
    big stone
    2018-05-05

    假如这是你自己的封装的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);    });


    2018-05-05
    赞同
    回复
  • 无边落木
    无边落木
    2018-05-05

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


    求指点!

    2018-05-05
    赞同
    回复
  • big stone
    big stone
    2017-12-19

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

    抱拳了~老铁

    2017-12-19
    赞同
    回复
  • Σ( ̄。 ̄ノ)ノ
    Σ( ̄。 ̄ノ)ノ
    2017-12-19

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

    2017-12-19
    赞同
    回复
  • big stone
    big stone
    2017-12-19

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

    2017-12-19
    赞同
    回复
  • Σ( ̄。 ̄ノ)ノ
    Σ( ̄。 ̄ノ)ノ
    2017-12-19

    我的意思是,你给你的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)
                })
            }
        })
    }


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

    2017-12-19
    赞同
    回复
  • big stone
    big stone
    2017-12-19

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

    2017-12-19
    赞同
    回复
  • Σ( ̄。 ̄ノ)ノ
    Σ( ̄。 ̄ノ)ノ
    2017-12-19

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


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

    2017-12-19
    赞同
    回复
  • big stone
    big stone
    2017-12-19

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

    2017-12-19
    赞同
    回复

正在加载...