收藏
回答

wx.hideLoading 问题

问题模块
API和组件

我一个页面有3个请求,请求方法公用了如下:

const wxRequest = (params, url) => {

wx.showLoading({

title: 'loading',

mask:true

});

wx.request({

url: configCommon.config.host + url,

method: params.method || 'GET',

data: params.data || {},

header: {

'Content-Type': params.contentType || 'application/json'

},

success: (res) => {

params.success && typeof params.success == "function" && params.success(res)

},

fail: (resFail) => {

},

complete: (res) => {

wx.hideLoading();

}

})

}


但是发现一个问题,当前面的请求返回后,导致执行了,wx.hideLoading();后面的返回还没有执行完毕,弹出的加载提示框就没了,这个如何破解呢?难道一个页面只能有一个请求吗?


最后一次编辑于  2017-09-15
回答关注问题邀请回答
收藏

6 个回答

  • Albert Einstein
    Albert Einstein
    2017-09-15

    您可以编程,使得所有请求都执行完毕后再隐藏。

    2017-09-15
    赞同
    回复
  • VR测试
    VR测试
    2017-09-15

    另外我的的第三个请求在页面是会根据不同的选项卡点击来不同的加载,这样怎么控制wx.showLoading呢?

    2017-09-15
    赞同
    回复
  • VR测试
    VR测试
    2017-09-15

    那这样的话,就不能并行加载,只能是顺序加载了? 其实小程序更多是建议一个页面是一个请求或者是按顺序来请求是这个意思吗?

    2017-09-15
    赞同
    回复
  • Z
    Z
    2017-09-15

    你可以把第二和第三个请求放在,第一个请求的成功的回调函数里面,然后把

    wx.hideLoading放在第三个或第二个请求的回调里面


    2017-09-15
    赞同
    回复
  • VR测试
    VR测试
    2017-09-15

    我尝试通过

    var requestCount = 0;

    开始请求时候,

    requestCount = requestCount+ 1;

    if (requestCount === 1) {

    wx.showLoading({

    title: 'loading',

    mask: true

    });

    }

    在complete中

    requestCount = requestCount- 1;

    if (requestCount === 0) {

    wx.hideLoading();

    }


    发现在模拟器没有任何问题,在安卓  苹果真机上无效。这个请求走 的逻辑也对,但是提示框还是小时的很快,有的请求并未加载完毕。

    2017-09-15
    赞同
    回复
  • VR测试
    VR测试
    2017-09-15

    额,好吧,既然API这边不支持,就像

    requestTask.abort() // 取消请求任务

    这样的api,那就只能自己去搞下

    2017-09-15
    赞同
    回复