收藏
回答

关于wx.showLoading有多个请求的问题

框架类型 问题类型 API/组件名称 终端类型 微信版本 基础库版本
小程序 Bug wx.showLoading 客户端 所有 所有

公司这个项目有的页面请求接口多的时候 会请求3-6个 但是使用wx.showLoading的时候 只要第一个接口请求完毕 就会执行wx.hideLoading 这样有一个接口先执行完就会导致loading没有了 请问可以给wx.showLoading指定变量,wx.hideLoading关闭指定的loading吗 或者有其他的骚操作 因为业务逻辑问题 接口也不能合并 只能单个请求


回答关注问题邀请回答
收藏

3 个回答

  • 铭锋科技
    铭锋科技
    2019-06-03

    test(e)  {

    var that = this

    that.setData({

    loadData: true

    })

    wx.showLoading({

    title: '数据下载中',

    })

    var url1 = that.data.editData.shop_swiperpic

    var url2 = that.data.editData.shop_detailpic

    var url3 = that.data.editData.shop_logopic


    var a = function () {

    return new Promise(function (resolve, reject) {

    if (!url1.length) {

    resolve("a")

    } else {

    util.downloadSaveFiles({

    urls: url1,

    success: function (res) {

    resolve("a")


    },

    fail: function (e) {

    console.info("下载失败");

    }

    }, that, 'swiperpic', '正在下载轮播图片');

    }

    })

    }


    var b = function (data) {

    return new Promise(function (resolve, reject) {

    if (!url2.length) {

    resolve(data + 'b')

    } else {

    util.downloadSaveFiles({

    urls: url2,

    success: function (res) {

    resolve(data + 'b')


    },

    fail: function (e) {

    console.info("下载失败");

    }

    }, that, 'detailpic', '正在下载详情图片');

    }

    })

    }


    var c = function (data) {

    return new Promise(function (resolve, reject) {

    if (!url3.length) {

    resolve(data + 'c')

    } else {

    wx.showLoading({

    title: '即将完成下载',

    })

    util.downloadSaveFiles({

    urls: url3,

    success: function (res) {

    resolve(data + 'c')


    },

    fail: function (e) {

    console.info("下载失败");

    }

    }, that, 'logopic', '正在下载商家LOGO');

    }

    })

    }



    function reduce(arr) {

    var sequence = Promise.resolve()


    arr.forEach(function (item) {

    sequence = sequence.then(item)

    })


    return sequence

    }


    reduce([a, b, c])

    .then(function (data) {


    setTimeout(function(){

    wx.showLoading({

    title: '数据下载完成',

    })

    that.edit()

    },1000)

    })

    .catch(function (e) {

    console.log(e)

    })

    },


    我们的逻辑大概就是这样子,

    2019-06-03
    有用 1
    回复 1
    • cctv168
      cctv168
      2019-06-03

      嗯嗯   谢谢

      2019-06-03
      回复
  • 李
    2020-08-06

    请问在app.js里面进行网络请求,然后主界面进行网络请求。而且网络请求全都是封装的promise。showloading 和 hideloading 都封装在请求里面了。这样怎么处理?

    2020-08-06
    有用
    回复
  • 天南地北
    天南地北
    2019-06-03

    用个蠢方法设置一个number=0;每个接口调用成功后number+1;然后在成功里面判断这个number==你调用的接口数,那就表示你的接口全部调用成功了。。。或者用promise

    2019-06-03
    有用
    回复
登录 后发表内容