【问题标题】:Parameters query with Promise (from Observable)使用 Promise 查询参数(来自 Observable)
【发布时间】:2018-08-23 04:13:25
【问题描述】:

这是我的ProspectAPIsService

import {Injectable} from "@angular/core";
import {HttpClient, HttpParams} from "@angular/common/http";

@Injectable()
export class ProspectAPIsService {
  constructor(private http: HttpClient) {
  }

  public getOneProspect(nome) {
  return this.http.get('assets/mocks/prospect.json').toPromise();
  }
}

我通过读取一个虚拟 json 文件来获取数据。这是该文件中的数据。

[
    {"nome":"Dam", "cog":"prova"},
    {"nome":"luc", "cog":"prova2"}
]

我必须使用 Promises 而不是 Observable。我真的不知道如何使用我在getOneProspect 方法中获取的参数“名称”来过滤结果数据。

【问题讨论】:

    标签: angular typescript rxjs observable angular2-observables


    【解决方案1】:

    当使用 Promise 时,您可以使用 .then(data) 链式函数,并在那里执行您的过滤器。这是未经测试的代码,但您可以执行以下操作:

    getOneProspect(input)
       .then((data: any[]) => {
           const prospect = // filter data here
           return prospect;
    }
    

    作为最佳实践,如果您在代码中定义了 any[],则需要将其替换为 prospect 类型的数组。

    我希望这会有所帮助!

    【讨论】:

      【解决方案2】:

      理想情况下,这应该是 RESTful API 应该做的事情,您将要求使用 HTTP 方法(GET/POST)。在这种情况下,您可以将名称作为查询参数(在GET 的情况下)或作为请求有效负载(在POST 的情况下)传递。 API 会使用过滤后的数据进行响应。

      但由于您GETting 模拟 JSON 文件,这是您必须在服务本身中执行的操作。

      因此,特别针对您的用例,将map 运算符链接到从调用httpget 方法返回的任何内容。在map 中进行过滤。然后,由于map 返回一个Observable,您可以将toPromise 链接到它。这应该可以解决问题。

      假设您将从您的前景.json 文件中获得 users 作为一个数组,这就是它将如何转换为代码:

      import {Injectable} from "@angular/core";
      import {HttpClient, HttpParams} from "@angular/common/http";
      
      import 'rxjs/add/operator/map';
      
      @Injectable()
      export class ProspectAPIsService {
         constructor(private http: HttpClient) {
         }
      
         public getOneProspect(nome) {
             return this.http.get('assets/mocks/prospect.json')
              .map(users => {
                  console.log(users);
                  return users.filter(user => user.nome === nome)[0];
              })
              .toPromise();
         }
      }
      

      【讨论】:

      • 但是Observable类型上不存在地图
      • 你必须import 'rxjs/add/operator/map';
      • 过滤方法呢?
      • Filter 是 JavaScript 中数组类型的内置方法。
      • 过滤器给了我同样的错误:“过滤器在对象类型上不存在”
      猜你喜欢
      • 1970-01-01
      • 2018-02-21
      • 2019-03-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多