Angular6 Angular 6 HttpClient.get Observable未赋值

Angular6 Angular 6 HttpClient.get Observable未赋值,angular6,angular-httpclient,rxjs6,Angular6,Angular Httpclient,Rxjs6,我想答案是很明显的,但我还是不明白。我是一名新的观察者,现在我面临着从一个值中赋值的问题。如果我将它定义为一个可观察的应用程序,并使用subscribe从视图向服务询问,我就成功了(但对我来说,这是一个复杂的过程)(图中的三个级别只是为了返回另一个数组的可观测值,然后是另一个函数来订阅上一个函数以分配变量,并在视图中订阅另一个函数以最终显示信息),效率低下,除此之外,我无法再次“正确”地获得它。任务非常简单。考虑到类应用程序 export class Application { name:

我想答案是很明显的,但我还是不明白。我是一名新的观察者,现在我面临着从一个值中赋值的问题。如果我将它定义为一个可观察的应用程序,并使用subscribe从视图向服务询问,我就成功了(但对我来说,这是一个复杂的过程)(图中的三个级别只是为了返回另一个数组的可观测值,然后是另一个函数来订阅上一个函数以分配变量,并在视图中订阅另一个函数以最终显示信息),效率低下,除此之外,我无法再次“正确”地获得它。任务非常简单。考虑到类应用程序

export class Application {
  name: string;
  baseUrl: string;
  deprecated: boolean;
}
和服务(仅相关代码)

以及调用此函数的函数声明:

private getAllApplications(): Observable<Application[]> {
   // the exactly the same as before
}
private GetAllApplication():可观察{
//这和以前完全一样
}
现在我从控制台上看到:

应用程序长度未定义

应用程序用户端
函数(){
如果(这个承诺的实例){
将PROMISE\u OBJECT\u返回到\u字符串;
}
返回originalObjectToString.apply(这是参数);
}

这就是我所说的函数。你知道为什么即使没有错误(编译时也没有,运行时也没有),返回的对象不是真正的应用程序数组吗?

更改这行:

private _apps: Application[] = [];
致:

默认情况下将其公开。然后此行将看到它:

this._apps = apps;

最后,我想是一种处理可观察对象的思维方式,我试图构建一种缓存,所以我唯一能做的就是(如果有更好的方法,请告诉我)正在使用视图填充缓存。我无法从服务本身进行填充,因为从视图调用函数是同步的,填充数组是异步的。因此,我必须创建一个公共setApplicationCache过程,该过程在从视图调用服务后填充,它调用setApplicationCache(Application[])函数和其他函数都可以工作,因为它只需要缓存来执行过滤和其他操作,或者从其他页面使用它,而不需要反复调用数据库

这是名为(主页)的第一个视图中的代码

该服务具有以下功能:

  private _apps: Application[] = [];

  getAllApplications(): Observable<Application[]>  {
    return this._http.get('http://development:4300/api/v1/atbc-apps').pipe(
      map( (response: Response) => {
        let results = response.json().data.map( app => {
        return new Application(app.name, app.baseUrl, app.deprecated);
      });
      return results;
    })
  );
}

getApplication(appName: string): Application {
  return this._apps.find(app => app.name == appName);
}

getApplications(onlyActives: boolean): Application[] {
  if (onlyActives) {
    return this._apps.filter(app => app.deprecated == false);
  } else {
    return this._apps;
  }
}
private\u应用程序:应用程序[]=[];
getAllApplications():可观察{
返回此。\u http.get('http://development:4300/api/v1/atbc-A.管道(
映射((响应:响应)=>{
让results=response.json().data.map(app=>{
返回新应用程序(app.name、app.baseUrl、app.deprecated);
});
返回结果;
})
);
}
getApplication(appName:string):应用程序{
返回此。\u apps.find(app=>app.name==appName);
}
getApplications(onlyActives:boolean):应用程序[]{
如果(仅活动){
返回此值。\u apps.filter(app=>app.deprecated==false);
}否则{
返回此。\u应用程序;
}
}

正如我所说的,解决方案应该是显而易见的。同样,使用可观察对象需要异步思维。

我做到了,但问题是相同的。除此之外,应用程序在服务内部可见(在外部不使用,可以通过公共方法访问);否则,我无法编译代码。事实上,在更改之前或更改后运行它不会出现任何错误,但也不会分配它。谢谢您的时间。
_apps: Application[] = [];
this._apps = apps;
ngOnInit() {
  this._myService.getAllApplications().subscribe(arrObjApps => {
  this._myService.setApplicationsCache(arrObjApps)
  this.listApps = this._myService.getApplications(true);
});    
  private _apps: Application[] = [];

  getAllApplications(): Observable<Application[]>  {
    return this._http.get('http://development:4300/api/v1/atbc-apps').pipe(
      map( (response: Response) => {
        let results = response.json().data.map( app => {
        return new Application(app.name, app.baseUrl, app.deprecated);
      });
      return results;
    })
  );
}

getApplication(appName: string): Application {
  return this._apps.find(app => app.name == appName);
}

getApplications(onlyActives: boolean): Application[] {
  if (onlyActives) {
    return this._apps.filter(app => app.deprecated == false);
  } else {
    return this._apps;
  }
}