如何使用rxjs中的过滤器

三通

我正在过滤JSON对象数组,我想基于传入的id参数返回找到的对象

 getClient(id) {
   return this.http.get<any>(' http://localhost:3000/clients')
    .pipe(
      filter(client => client.idNumber === id)
    );
 }

上面的观察者不会被触发,并且不会接收任何数据。

  getClient(id)
  .subscribe(
   (data) => {
     // nothing here
   }
  )

下面的实现getClient实现了我想要的。

 getClient(id) {
   return this.http.get<any>(' http://localhost:3000/clients')
    .pipe(
      map(clients => clients.find(client => client.idNumber === id))
    );
 }

我想了解一下,我使用过滤器运算符的方式是否错误?我的用法与这里的用法有何不同

cjd82187

正确,您filter以错误的方式使用rxjs运算符。

根据文档

通过仅发出满足指定谓词的项来过滤由源发出的项。

在您的示例中,client发送到过滤器值是您的http请求返回的客户端数组。然后,您说的是“不要发出任何东西,除非client(它实际上是一个数组并且没有“ idNumber”属性等于id,它始终为false,因为unefined !== number

如果要修改,则需要使用map运算符。映射运算符采用可观察对象发出的内容,让您执行某些操作(例如过滤或在数组中查找),然后将修改后的数据返回给订户。

另外,如果您键入响应属性,TypeScript会警告您。而不是this.http.get<any>使用this.http.get<Client[]>或更合适的类型。您将能够在编译时看到Client[]没有属性的对象idNumber

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章