【问题标题】:How to get data from a generic http get method which returns Observable<T []> in angular 2 version 0.8如何从 Angular 2 版本 0.8 中返回 Observable<T []> 的通用 http get 方法获取数据
【发布时间】:2019-06-26 02:26:15
【问题描述】:

Angular 版本 8.0.4

如何从以角度返回 Observable 类型 T 数组的泛型方法获取数据? 这是我写的函数

获取数据的通用方法

public getData<T> (path: string): Observable<T[]> {
        return this.http.get(this.baseUrl + path).subscribe();
        // return this.data;
        // var ddd: T[];
        // return this.http.get<Observable<T[]>>(this.baseUrl + path);

        // var data: any  = this.http.get(this.baseUrl + path).toPromise();
        // console.log(data)
        // return of(data);
    }

这是调用函数

getRecords(): Observable<Trailers[]> {

        var k: any = this.httpService.getData<Trailers>("get_trailers");
        console.log(of(k));
        return of()
    }

Angular 2 旧版本有这样的东西

public getObjects<T> (path: string): Observable<T[]>  {
        return this.http.get(this.baseUrl+path)
            .map((response: Response) => <T[]> response.json())
            .do(data => console.log('Retrieved data from: ' + this.baseUrl+path))
            .catch(error => this.handleError(error, this.router));
    } 
What is equivalent in angular 0.8 to this ?

【问题讨论】:

  • 你可以尝试只返回 Observable(返回 this.http.get(this.baseUrl + path))然后在调用函数 this.httpService.getData("get_trailers") 中使用 subscribe .subscribe( (t) => {k = t);
  • @Nuttertools 你的意思是像return &lt;Observable&lt;T[]&gt;&gt;this.http.get(this.baseUrl + path);
  • public getData (path: string): Observable { return this.http.get(this.baseUrl + path); |
  • 上面的 @Nuttertools 会抛出一个错误,因为它缺少 &lt;Observable&lt;T[]&gt;&gt; 转换和 this `this.httpService.getData("get_trailers").subscribe( (t) => {k = t );` 将返回 observable 而不是数据 ```
  • Conversion of type 'Subscription' to type 'Observable&lt;T[]&gt;' may be a mistake because neither type sufficiently overlaps with the other. If this was intentional, convert the expression to 'unknown' first.

标签: angular observable angular2-services


【解决方案1】:

Angular 版本:8.0.2

函数可以像,

get<T>(id: string): Observable<T> {
   return this.httpclient.get<T>(this.baseUrl+ '/' + id);
}

来电者可以,

this.service.get<MyModel>(id).subscribe((val:MyModel) => { ... // your business logic });

【讨论】:

  • 什么是this.myList[id] = val
  • 这只是我的用例实现,myList: MyModel[]
【解决方案2】:

就我而言,我像这样使用 Observable 和 Subscribe。

功能

getTestStatus() :Observable<any[]> {
  return this.httpClient.get(`${this.api}/demo/state`) as Observable<any[]>;
}

打电话

let result;
this.getTestStatus().subscribe((res) => {
  result = res
  console.log(result);
});

像异步/等待一样订阅工作,如果你尝试从中打印一些数据,你应该在订阅中做

希望有帮助,如果没有,你应该等其他人。

【讨论】:

  • this let result 可能无法使用您使用的 Angular 版本?
  • "@angular/cli": "7.3.9", (typescript)
  • 你可以使用var,它只是声明变量
【解决方案3】:

Http Get 方法返回 Observables。要从 Observables 读取数据,它需要订阅。这就是这里使用 subscribe() 方法的原因。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-09-26
    • 2016-10-18
    • 2017-06-24
    • 2019-08-05
    • 1970-01-01
    • 1970-01-01
    • 2019-01-13
    • 1970-01-01
    相关资源
    最近更新 更多