angular - RxJS 6+ 类型 'Observable' 必须有一个返回迭代器的 'Symbol.iterator' 方法

标签 angular typescript rxjs

尝试从可观察对象中获取经过过滤的值数组时出现以下错误:

Type 'Observable' must have a 'Symbol.iterator' method that returns an iterator.

代码:

export class ItemsService {

  orderItems: OrderItem[] = [];
  orderItemsUrl = 'http://localhost:5000/order-items/';

  getOrderItemsFromHttp(selectedOrderNumber): Observable<OrderItem[]> {
    const tempArr = [];
      const orderItems = of (this.http.get<OrderItem[]>(`${this.orderItemsUrl}`)
      .subscribe(res => {
            this.orderItems = res;
      }) );

    for (const orderItem of orderItems) {                        <--- Error here
        if (orderItem.orderNumber === selectedOrderNumber) {
          tempArr.push(orderItem);
        }
    }
    return of(tempArr);
  }  
}

如果我修改以下内容

for (const orderItem of orderItems) {

for (const orderItem of [orderItems]) {

错误消失了,但是属性 orderNumber 不再被重新识别,并且 intellisens 说:

Property 'orderNumber' does not exist on type 'Subscription'

请问我该如何解决?

最佳答案

在我看来你正在寻找这个:

  getOrderItemsFromHttp(selectedOrderNumber): Observable<OrderItem[]> {
    return this.http.get<OrderItem[]>(`${this.orderItemsUrl}`).pipe(
      map(orderItems => orderItems.filter(oi => oi.orderNuber === selectedOrderNumber))
    );
  }  

为此,您需要导入 map 运算符:

import { map } from 'rxjs/operators';

关于angular - RxJS 6+ 类型 'Observable' 必须有一个返回迭代器的 'Symbol.iterator' 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61126916/

相关文章:

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

ajax - Rxjs:如何观察对最后发出的 Ajax 请求的 HTTP 响应

angular - 每次使用 Angular 4 更改数组时触发动画

typescript - 如何使 typescript 推断出更具体的类属性类型?

javascript - rxjs:重置为流并且只获得一个输出

angular - 有什么方法可以改变 Angular 5 HttpInterceptor 中的响应吗?

typescript - 类型错误 : Cannot find type definition file for '@babel'

angular - 如何在 Angular2 中用 Array<Object> 填充 PrimeNG DataTable?

javascript - init 上的 api 调用和参数更改

angular - 在表格的一行内单击按钮更改属性 [禁用] 值 - Angular 6