Javascript 角度:将一个可观察的对象传递给另一个服务

Javascript 角度:将一个可观察的对象传递给另一个服务,javascript,angular,rxjs,Javascript,Angular,Rxjs,我有一个服务“DataStorageService”,负责通过HTTP从firebase获取数据。看起来是这样的: export class DataStorageService { private _data_source_url = "https://a******9.firebaseio.com/"; constructor(private _http: Http) {} getUsers() { return this._http.get(this._data_

我有一个服务“DataStorageService”,负责通过HTTP从firebase获取数据。看起来是这样的:

export class DataStorageService {

  private _data_source_url = "https://a******9.firebaseio.com/";

  constructor(private _http: Http) {}

  getUsers() {
    return this._http.get(this._data_source_url + "users.json")
      .map((response: Response) => {
        return response.json();
      });
  }

}
@Injectable()
export class UsersService{

  private _users: User[];
  public usersChanged = new Subject<User[]>();

  constructor(private _dataStorageService: DataStorageService) {}

  public getUsers(): User[] {
    this._dataStorageService.getUsers()
      .subscribe((users: User[]) => {
        this._users = users;
        this.usersChanged.next(users);
      });
    return this._users.slice();
  }

}
我正在使用另一个服务“UsersService”将这些数据放入一个用户数组中。看起来是这样的:

export class DataStorageService {

  private _data_source_url = "https://a******9.firebaseio.com/";

  constructor(private _http: Http) {}

  getUsers() {
    return this._http.get(this._data_source_url + "users.json")
      .map((response: Response) => {
        return response.json();
      });
  }

}
@Injectable()
export class UsersService{

  private _users: User[];
  public usersChanged = new Subject<User[]>();

  constructor(private _dataStorageService: DataStorageService) {}

  public getUsers(): User[] {
    this._dataStorageService.getUsers()
      .subscribe((users: User[]) => {
        this._users = users;
        this.usersChanged.next(users);
      });
    return this._users.slice();
  }

}
@Injectable()
导出类用户服务{
私有用户:用户[];
public usersChanged=新主题();
构造函数(私有_dataStorageService:dataStorageService){}
public getUsers():用户[]{
这是。_dataStorageService.getUsers()
.subscribe((用户:User[])=>{
这是.\u users=用户;
this.usersChanged.next(users);
});
返回此项。_users.slice();
}
}
我正试图使用users服务中的getUsers()方法从组件访问数组。但是,我没有得到任何数据,我认为这是因为getUsers没有等待数据从subscribe返回,并执行return语句,而return语句当时什么都没有。但我想不出任何解决办法来解决这个问题


我需要一些专家的建议。另外,我做这项工作的方法正确吗

为什么不在组件中执行此操作

this.usersService.usersChanged.subscribe(users => {
this.componentUserVariable = users
})

我必须在某个地方调用getUsers,以便首先发出事件。另外,我试图从函数中获取数据,我错了吗?您已经在从服务中调用getUsers,您只需要在组件中订阅usersChanged,但是谁会调用UsersService的getUsers?Bro您可以在服务本身的构造函数中调用它,也可以在组件中订阅它之前调用它