网速慢时 上拉加载请求的数据 会拼接在后进行的下拉刷新请求数据后
发布于 5 年前 作者 taowei 6057 次浏览 来自 问答

现在有这么一个场景,一个页面同时具有上拉加载和下拉刷新。

因为网速问题,先执行了一次①上拉加载,加载的数据还没有请求到;就进行了一次②下拉刷新页面。

结果②下拉刷新的数据先请求到,①上拉加载请求的数据后请求到,①上拉加载的数据拼接到了②下拉刷新后的数据后。导致数据错误。

请问能不能在下拉刷新页面时,清除之前的网络请求?

或者有没有什么可行的解决办法?

/**加载更多连接新旧数组

* @param  {‘this’} that

* @param  {string} listStr 数组名字

* @param  {array} list 之前的数组

* @param  {array} _list 新数组

* @param  {function|false} fn1 _list处理函数

* @param  {function|false} fn2 _list处理函数2

*/

const loadConcat = function (that, listStr, list, _list, fn1 = false, fn2 = false) {

    if (_list.length > 0) {

        if (fn1) fn1(_list);

        if (fn2) fn2(_list);

        list = list.concat(_list)

        that.setData({

        [listStr]: list

        })

    } else {

        if (list.length > 0) {

            Tip(that, false, ‘2’, ‘没有更多了’); 

        }

    }

    return list;

};

/**通过条件检索用户意向

*/

searchUserInvestmentList: function () {

    let that = this;

    let postData = {

        pageNo: this.data.pageNo,

        pageSize: this.data.pageSize,

    }

    //写的一个promise的wx.request

        this.getData(this, App.api.searchUserInvestmentList, ‘investment’, postData).then((res) => {

        let investmentList = that.data.investmentList;

        let _investmentList = res.data.investList;

        //handleIntentDesc是处理数据的方法

        loadConcat(this, ‘investmentList’, investmentList, _investmentList, handleIntentDesc);

        if (this.data.pageNo == 1) {

            wx.setStorageSync(‘oldInvestmentList’, handleIntentDesc(res.data.investList))

        }

    });

},

/**

* 生命周期函数–监听页面加载

*/

onLoad: function (options) {

    this.setData({

       oldInvestmentList:wx.getStorageSync(‘oldInvestmentList’),

    })

    this.searchUserInvestmentList();

},

/**

* 页面相关事件处理函数–监听用户下拉动作

*/

onPullDownRefresh: function () {

    this.setData({

        oldInvestmentList:wx.getStorageSync(‘oldInvestmentList’),

        goTop:0,

        investmentList: [],

        pageNo: 1

    });

    this.searchUserInvestmentList();

    wx.stopPullDownRefresh();

},

3 回复

下拉发送请求前创建个页面全局下拉状态isPullDown为true,下拉获取到数据后更改状态为false,上拉同理创建个上拉状态,isPullUp

下拉时判断一下当前状态,根据不同的状态执行不同的操作



不知道为什么,代码片段发布不了

回到顶部