【发布时间】:2019-08-02 13:30:43
【问题描述】:
我完全被这个困住了。我在互联网上上下搜索,至少花了两个小时在 HttpClient 上查看 SO 答案,但没有得到任何结果。
我有这个应该从 REST 端点检索一些数据的基本服务
import { Injectable, Inject } from '@angular/core';
import { HttpClient, HttpHeaders } from '@angular/common/http';
@Injectable({
providedIn: 'root'
})
export class UtilityService {
public getSavedProject() {
return this.http.get(this.baseUrl + 'api/ProjectAction/RetrieveActions');
}
}
此代码随后将用于我添加以下代码的第二个服务中
@Injectable({
providedIn: 'root'
})
export class ProjectTreeActionService {
//...
private data;
constructor(private utilityService: UtilityService) {}
getSavedProject() {
this.utilityService
.getSavedProject()
.subscribe((result) => this.data = result[0].toString() );
return this.data;
}
这是每个教程和示例中或多或少描述的最基本的行为。但是在我的情况下,最后一行 return this.data 总是给我一个 undefined。
我已经通过在subscribe 回调中将预期结果记录到控制台来检查是否正确检索了预期结果,但是我无法将值写入我需要它继续使用它的类属性。
我错过了什么?
【问题讨论】:
-
您正在异步调用 ProjectTreeActionService 的 getSavedProject() 函数。尝试在 this.data = result[0].toString() 之后放置 'return this.data'
-
这里只是问了同样的问题stackoverflow.com/questions/57040160/…
-
您缺少的部分是异步。当您执行
utiliService.getSavedProject().subscribe(...)时,您基本上告诉您的程序:“获取utiliService.getSavedProject 返回的observable 的结果”并将其值分配给类属性data。然后返回类属性data,即undefined因为你还没有结果。然后你有了结果并将它的值分配给数据,但为时已晚。 -
感谢您的提示,我终于解决了这个问题。
标签: angular angular-httpclient