我有一个服务“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/