我有一个角度2服务,它有一个返回下拉列表数据的函数。该函数返回一个promise。
以下服务代码:
getStuff(): Promise<Stuff>
{
return this.http.get("http://myserver/myServices/myService.svc/rest/getStuff")
.map(res => this.dataHandler.extractData(res)).toPromise()
.catch(err => this.dataHandler.handleHttpError(err));
}
然后我从保存事件中调用此函数来更新新保存的数据,以便使用此数据的下拉列表将包含最新数据。
我的代码调用此服务:
ngOnInit()
{
this.onSavedSubscription = this.OnSaved.subscribe((data: any) =>
{
if (data.IsSuccessful)
{
this.myService.getStuff().then(
res=>
{
this.myService.stuffs = res;
}
);
}
}
当调用上面的代码时,会调用getStuff函数,但在它可以从数据库返回更新的数据之前,代码执行转移到&#34;然后&#34;并使用res中包含的旧数据填充this.myService.stuffs。我不知道发生了什么事。我想&#34;然后&#34;在getStuff完成执行并返回新数据之前不会执行。请帮忙。
答案 0 :(得分:0)
我发现行为的原因是数据被缓存,所以我将服务更改为以下内容:
getStuff(useCachedData: boolean = true): Promise<Stuff>
{
if (useCachedData)
{
return this.http.get("http://myserver/myServices/myService.svc/rest/getStuff")
.map(res => this.dataHandler.extractData(res)).toPromise()
.catch(err => this.dataHandler.handleHttpError(err));
}
else
{
let headers = new Headers();
headers.append('Cache-control', 'no-cache');
headers.append('Cache-control', 'no-store');
headers.append('Expires', '0');
headers.append('Pragma', 'no-cache');
return this.http.get("http://myserver/myServices/myService.svc/rest/getStuff", { headers: headers })
.map(res => this.dataHandler.extractData(res)).toPromise()
.catch(err => this.dataHandler.handleHttpError(err));
}
}
这样我可以选择是否缓存。如果我遗漏了某些东西,或者有更好/更简单的方式来选择何时缓存请发表评论并告诉我。