使用 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
类型的数组(如果您已在代码中定义该数组)。
希望对您有所帮助!
理想情况下,这应该是 REST
ful API 应该做的事情,您将要求使用 HTTP
方法(GET
/POST
).在这种情况下,您会将名称作为查询参数(在 GET
的情况下)或作为请求负载(在 POST
的情况下)传递。 API 将使用过滤后的数据进行响应。
但是由于您要 GET
模拟 JSON 文件,这是您必须在服务本身中做的事情。
因此,专门针对您的用例,将 map
运算符链接到从调用 http
的 get
方法返回的任何内容。在 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();
}
}
这是我的 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
类型的数组(如果您已在代码中定义该数组)。
希望对您有所帮助!
理想情况下,这应该是 REST
ful API 应该做的事情,您将要求使用 HTTP
方法(GET
/POST
).在这种情况下,您会将名称作为查询参数(在 GET
的情况下)或作为请求负载(在 POST
的情况下)传递。 API 将使用过滤后的数据进行响应。
但是由于您要 GET
模拟 JSON 文件,这是您必须在服务本身中做的事情。
因此,专门针对您的用例,将 map
运算符链接到从调用 http
的 get
方法返回的任何内容。在 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();
}
}