【发布时间】:2018-10-26 05:42:10
【问题描述】:
我只需要向服务器请求一次数据,然后在加载应用时使用它
getData(callback: Function) {
if (this.data) {
callback(this.data);
} else {
this.query.http.get('url', res => {
this.data = res;
callback(this.data);
});
}
}
问题是当app启动时,很多组件同时请求数据,导致30-40个http请求,所以我想出了这个解决方案:
getData(callback: Function) {
if (this.data) {
callback(this.data);
} else if(!this.gettingData) {
this.gettingData = true;
this.query.http.get('url', res => {
this.data = res;
callback(this.data);
});
} else {
setTimeout(() => {
getData(callback);
}, 500)
}
}
所以如果http请求正在进行,它会在500ms后再次请求数据,如果请求返回错误我将gettingdata重置为false,它可以工作,但是感觉很脏和错误,我如何订阅正在进行的http另一个函数调用者调用的请求?
【问题讨论】:
-
问题在于,当应用启动时,很多组件同时请求数据,导致 30-40 个 http 请求 - 这不是一个好时机吗?重新考虑你的设计?也许引入一个服务,在根目录下提供,并注入到需要的组件中?
标签: javascript angular typescript http