在调用Web服务完成之前,通过承诺对Web服务进行Angular2调用

时间:2017-04-03 21:36:52

标签: angular typescript promise angular-promise

我有一个角度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完成执行并返回新数据之前不会执行。请帮忙。

1 个答案:

答案 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));
    }
}

这样我可以选择是否缓存。如果我遗漏了某些东西,或者有更好/更简单的方式来选择何时缓存请发表评论并告诉我。