Angular 6 observables - extract data from .subscribe() function and use it elsewhere
我正在用 observables 将我的头撞到墙上。我能找到的几乎所有文档都是旧的
我有一个可观察的 API 调用。我在别处调用它并订阅它 - 试图用来自这个
如果我只是
我可以在
之外使用
如何从
1 2 3 4 5 6 7 8 9 10 11 | getData2() { return this.m_dbService.get('api/myApiPath').subscribe( data => (console.log(data)), //This properly logs my data. How to extract `data` out of here and actually use it? error => { throw error }, () => console.log("finished") ); } workbookInit(args){ var datasource = this.getData2(); // this returns the subscription and doesn't work. } |
您可能想要做的是用数据填充另一个
为此,您可以创建一个所谓的
然后,为了在别处访问这些数据,您可以创建一个 "get" 函数来在需要数据时返回
这是一个例子:
1 2 3 4 5 6 7 8 9 10 11 | myData: BehaviorSubject<number> = new BehaviorSubject<number>(0); callApi() { this.dbService.get('apiUrl').subscribe( (data) = > this.myData.next(data) // Assuming data is a 'number' ); } getMyData() { return this.myData.asObservable(); } |
现在在组件中使用它:
1 2 3 | this.myService.getMyData().subscribe( (data) => { /* Use the value from myData observable freely */ } ); |
或者您可以依赖 Angular 异步管道(这是处理代码中可观察对象的一种非常方便的方法)。
只需从
1 2 3 4 5 6 7 8 9 10 11 12 | getData2() { return this.m_dbService.get('api/myApiPath') } workbookInit(args){ this.getData2().subscribe( data => { var datasource = data }, error => { throw error }, () => console.log("finished") } |
您不应该订阅
1 2 | var dataSource; this.getData2().subscribe(res => dataSource = res); |
请注意,变量
如果您想立即使用它,请将您的代码放入订阅中。
如果你有一个提供数据来填充表格的 observable,最好的方法是不要使用