小程序for循环嵌套请求接口问题

前段时间实现一个小程序滚动加载更多消息的功能(利用scroll-view实现),其中有几个需求需要特殊处理,

  1. 点击列表项可以进入详情;
  2. 点击列表项数据状态改变;
  3. 详情返回列表项位置依旧在离开时的地方

如果点击时没有数据状态改变那么可以直接使用onLoad方法可以轻松解决,因为要刷新数据,所以只能讲数据请求放在onShow方法中,这样便造成页面返回数据不能停留在离开时的位置
首先想到的是利用for循环将获取到已经加载的页数,从1递增到离开时的页数

for(var i=1,i<=pageNum;i++){
    wx.request({
        ...//请求数据与处理
    })
}

然而微信的请求是异步的,使用var循环后i始终为最后一页.因为小程序支持ES6,直接将var换成let,可是结果和我们预想的不一样,每次获取到数据最少的最先返回,使用数组拼接concat发现顺序总是不可预测(可能和数据查询花费的时间有关)
其实能用for循环遍历的东西都可以使用递归的方法替代,只是递归的的方法效率会慢一点

function getItems(){
    wx.request({
        ... //
        success:(res)=>{
            if(num < pageNum) {
                getItems(++num);
            }
        }
    })
}
getItems(1)

这样虽然可以解决数据加载的问题,但是在IOS下还是没法回到离开时的位置,这个时候利用scroll-view组件的scroll-top属性通过bindscroll获取到高度,然后手动设置一下,这样所有的问题就解决了

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 关于Mongodb的全面总结 MongoDB的内部构造《MongoDB The Definitive Guide》...
    中v中阅读 32,048评论 2 89
  • 使用快捷键可以提高我们的开发效率,所以在这里总结了一些个人的常用快捷键(不完全快捷键)。 多行快速选择文本 Ctr...
    Rin阳阅读 15,376评论 1 9
  • 小朋友真的好勇敢,我还担心你第一次取手指血会哭,没想到你看着医生阿姨只是不耐烦的哼哼唧唧,阿姨取了五分钟才取完,你...
    抒启阅读 97评论 0 1
  • 2017-01-16 “身体是革命的本钱。”打我记事起,这句话就无时无刻萦绕在我耳边,渐渐地植根于记忆。 不同的人...
    静宇蓝歆阅读 306评论 0 0
  • 我们经常会在一些过去的影视剧里看到这样一些镜头:一个穿金戴银、衣着华丽的“土豪”看到身边一些衣着俭朴的穷人,便用鄙...
    淘砂阅读 789评论 0 0