javascript - ajax请求一个异步代码的问题
本文介绍了javascript - ajax请求一个异步代码的问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
问 题
问题
现在有一个需求,我需要发送n
个请求,接口如下
favorite/goods?update_time={time}
&page={page}
&size={size}
GET到的数据格式为{update_time: Number, data: []}
每个请求是依赖上一个请求的,比如这个请求的update_time要放在下一个请求中,每个请求的page也会++,
需求
我需要一次性拿到n组数据,一次性展示到页面上
限制
公司目前只支持到promise,还不能用yeild和async
提问
请问大家应该怎么做,因为n的个数不一定,我不能手动一直.then去写
解决方案
没人答自己写了一个。。。代码如下
// 下拉刷新请求
request(callback) {
// 区分首次加载和之后加载,首屏加载会有加载组件,回退定位等
if (this.isFirstLoaded) {
// 从localStorage中获取上次加载页数
let initPage = localStorage.getItem(LS_KEY.goodsPage)
? parseInt(localStorage.getItem(LS_KEY.goodsPage), 10)
: 1;
localStorage.removeItem(LS_KEY.goodsPage);
// 扩大初始加载个数
this.baseNum = initPage * LOAD_SIZE;
Spinner.show();
this.initRequest([], initPage, callback);
}
else {
this.loadGoodsData(callback);
}
return;
}
// 加载首屏数据,用于回退定位
loadInitData() {
this.goodsPage++;
this.goodsInfo.goodsModel.params = {
favorite_update_time: this.goodsInfo.updateTime,
page: this.goodsPage,
size: LOAD_SIZE
};
return this.goodsInfo.goodsModel.get();
}
// 一个递归请求,可加载多页数据,用于带回退定位的首次加载数据
initRequest(target = [], stopPage = 1, callback) {
this.loadInitData()
.then(data => {
target = target.concat(data.goodsList);
this.handleResponse(data);
if (stopPage === 0) {
callback && callback(target);
this.isFirstLoaded = false;
Spinner.hide();
return;
}
stopPage--;
this.initRequest(target, stopPage, callback);
});
}
// 对每次的数据请求进行处理
handleResponse(data) {
let goods = this.itemsStore;
let newLoadList = data.goodsList;
if (newLoadList.length === 0) {
this.isFirstLoaded && this.props.showNoGoods();
this.goodsPage--;
}
this.goodsInfo.updateTime = data.updateTime;
this.updateLocalStorage({
goodsList: goods.concat(newLoadList),
updateTime: data.updateTime
});
}
这篇关于javascript - ajax请求一个异步代码的问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文