promise (layer.load在ajax为同步请求的时候不可用,只能用于异步请求)

需求描述:点击按钮触发批量获取数据,

需求点一:由于过程较慢,点击按钮开始到拿到数据中间过程需要有load,

需求点二:批量请求数据过程中,如果有请求失败的,需要记录起来,到最后所有批量请求完之后提示用户哪些条记录获取失败了

问题点一:layer.load只能在ajax为异步请求的时候可用

问题点二:最后给用户的失败提示,需要同步每条请求时候失败了追加到变量里才能做展示,如果是异步,那失败数组里面就没有内容

 

就是既要有load又要能拿到每条的失败数据

那就让请求是异步,然后load可以了,想办法解决拿返回值的问题,这会儿就想到promise,有可以等待结果,

 

 

 

plgetsynum() {
        let load = layer.load();
        console.log(table.cache['zrwtabel'])
        var zrwdata = table.cache['zrwtabel'];
        var that = this;
        that.plfailid = []
        const promiseAllList = []
        zrwdata.forEach((item, index) => {
          const p = that.getTljInfoV2(item)
          promiseAllList.push(p)
        });
        console.log(promiseAllList, 333)
        Promise.all(promiseAllList).then(() => {
          layer.close(load); // 关闭
          table.reload('zrwtabel', { url: '', data: zrwdata });
          if (that.plfailid.length > 0) {
            layer.msg("未获取到【" + that.plfailid.join(',') + "】的淘礼金信息", { icon: 2 });
          } else {
            layer.msg("获取成功", { icon: 1 });
          }
        })
      },
getTljInfoV2(item) {
        let p = new Promise((resolve, reject) => {
          let that = this;
          $.ajax({
            type: "POST",
            url: "/cms/Tlj/getTljInfoV2",
            data: { id: item.id, type: 'pl_hb', only_member: 'Y' },
            success: function (json) {
              if (json.code == 200) {
                item.todayNumLeft = json.data.todayNumLeft;
              } else {
                that.plfailid.push(item.id);
              }
              resolve()
            },

          })
        })

        console.log(p, 1111)
        return p
      },

 

posted @ 2021-07-24 17:09  hhxx123  阅读(421)  评论(0编辑  收藏  举报