官方文档指出,一个页面只能存在一个showLoading和一个hideLoading,且成组匹配存在。
出行问题的原因,多个请求同时都调用了showLoading,但是其实不管你调用多少次,页面仅存在一个showLoading,所以当请求返回时,多个接口又同时调用了hideLoading,这时候就只有一个hideLoading生效,其他的hideLoading因为找不到showLoading就会报错 “hideLoading:fail:toast can't be found?”
我的解决方法:
//loading,接口传入参数,决定是否调用showLoading
if(loading){
//is_showLoading 自定义的一个公共数组,每有一个接口调用showLoading就往里面push一个值
this.is_showLoading.push(1);
wx.showLoading({
mask,
title
});
}
//接口返回时 complete中
//判断该接口是否是使用了loading,如果是,pop掉一个is_showLoading的值
//当异步请求最后一个返回判断到is_showLoading的长度是0时,才真正的hideLoading
if(loading){
this.is_showLoading.pop();
if(this.is_showLoading.length === 0) wx.hideLoading();
}