小程序 有很多个页面,
在访问服务器的时候 request接口防止 时间过长 ,加了 showloading , 在complete 里面调用hideLoading
由于页面跟服务器交互比较多 , loading条会一直频闪。 感觉体验不太好。
这块有没有好的解决方式?能实现 加载到最后一个才调用 hideLoading
-------------------------------------------------
如果放到每个页面,
一个是工作量确实很大, 大约有十几页;
另一个由于是异步处理的,这里面结束的顺序未必是先后顺序;
再有就是之后扩展起来比较麻烦。
这块高手能给个建议吗?是如何实现的?
req1:
function
(){
return
new
Promise(r => wx.request({ complete:r }))
}
,req2:
function
(){
return
new
Promise(r => wx.request({ complete:r }))
},
run(){
wx.showLoading()
Promise.all([
this
.req1,
this
.req2]).then(wx.hideLoading)
}
如果同时进行两个请求就在全部结束后执行hide。如果是同步先后请求,就在后者执行hide
非常感谢!
你好 ,我再请求个问题, 我看了 Promise.all 接口,,如果其中一个失败了,那就直接返回失败的,
那另外的请求成功的接口还会返回吗?
还一个问题 【麻烦您了】
就是 我在app.js 里面,调用了 接口 登录获取token 还有一些数据之类的
然后 在初始的页面里面的onload 判断如果有token 获取额外的一些数据[由于是不同的防守可能进入不同的页面,比如二维码,或者分享之类的]
这样进入页面的时候 会有至少两次 loading, 这样能解决吗?
complete是 接口调用结束的回调函数(调用成功、失败都会执行)所以无论成功失败都会进入then
获取token不用show和hideLoading。因为token和页面元素没有直接关系,所以在页面onLoad时showLoading,业务接口完毕后hide就好。
每次showLoading计数+1,每次complete计数-1,归零的时候才hide
谢谢
我有个疑问, 那success 里面内容 执行的时候,是都返回了才 执行complete吗? 我不知道这个顺序。如果是这样就解决了。
如果complete同时执行 可能还是之前的情况。 我试一下。。
刚刚测试了下, 执行顺序是这样的。
我在 request 打印 1 , 在它的内部打印2, 也就是 执行完 success 立即先执行了complete, 然后内层嵌套的 success 和complete 是后执行的。
那这样 计数可能就没作用了。
在发起request之前就showLoading了噻
count=0
showLoading
count++
wx.request({
success:()=>{
count++
wx.request({
success:()=>{
},
complete:()=>{
count--
if(count==0){
hideLoading
}
}
})
},
complete:()=>{
count--
if(count==0){
hideLoading
}
}
})
你是说这么写有问题吗?
非常感谢 ! 昨天我想通了, 是调用之前已经加一了, 所以一直是1,最后是0。。
补充, 我一般是在 第一个request的success 里面 再次调用request.