使用 Promise 进行参数查询(来自 Observable)

Parameters query with Promise (from Observable)

这是我的 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 方法中获取的参数 'name' 来过滤结果数据。

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

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

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

希望对您有所帮助!

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

但是由于您要 GET 模拟 JSON 文件,这是您必须在服务本身中做的事情。

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

假设您将从 prospect.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();
   }
}