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

标签 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 没有等待数据从订阅返回,而是执行了当时没有任何内容的返回语句。但我想不出任何可以解决这个问题的解决方案。

我需要一些专家的建议。另外,我的方法做这样的任务是否正确?

最佳答案

你为什么不在你的组件中这样做?

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

关于javascript - Angular:将 Observable 传递给另一个服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47551373/

相关文章:

javascript - 如何在 JavaScript 中定义和调用原型(prototype)中的私有(private)方法?

angular - 如何更新异步管道中使用的 Observable?

javascript - 当另一个数据更新时,Angular 2更新数据

javascript - 如何在 Angular2 中停止 observable.timer

javascript - 分配给组件属性时不执行订阅

javascript - 如何添加去抖动以响应 onChange 输入

javascript - 异步每个系列未按预期返回

php - JavaScript 问题 - 未将前导 '0' 的字符串传递到正确的字符串

angular - dart angular2 - 访问模板中的映射值组件

css - 在输入字段中嵌入图像