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
},