Angular:将Observable传递给另一个服务

时间:2017-11-29 11:09:14

标签: 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_source_url + "users.json")
      .map((response: Response) => {
        return response.json();
      });
  }

}

我正在使用其他服务“ UsersService ”将此数据转换为用户数组。它看起来像这样:

@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 中的 getUsers()方法从组件访问数组。但是,我得到的数据我认为是因为getUsers不等待数据从订阅返回并执行当时没有任何内容的返回语句。但我想不出任何可以解决这个问题的解决方案。

我需要一些专家建议。另外,我的方法是否正确执行此类任务?

1 个答案:

答案 0 :(得分:0)

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

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