NestJS 在另一个 API 调用上使用 API 调用的内容,并且 return 最后一个 API 调用的内容
NestJS use the content of a API call on another API call and return the content of the last API call
我正在尝试将第一个 API 请求的内容用于另一个 API 请求,但没有成功。我只需要在第一个请求完成后才执行第二个请求。
目前我得到的是:
@Injectable()
export class WeatherService {
constructor(private httpService: HttpService) {}
getWeather(city: GetWeatherDto): Observable<AxiosResponse<any>> {
return this.httpService.post(`http://localhost:3000/cities`, city).pipe(
map((response) => response.data),
tap((data) =>
this.httpService
.get(
`https://api.openweathermap.org/data/2.5/weather?id=${data.city_id}&appid=APIKEY&lang=pt_br`,
)
.pipe(map((response) => response.data)),
),
);
}
}
您可以使用状态代码来确定请求是否成功,如果需要,甚至可以不确定是否有数据。
tap((response) =>
if (response.status == 200){
if (response.data){
this.httpService.get(`https://api.openweathermap.org/data/2.5/weather?id=${data.city_id}&appid=APIKEY&lang=pt_br`,).pipe(map((response) => response.data)),),
}
}
),
我认为你可以使用 switchMap 运算符来达到预期的结果。您可能会进行一些小的更改以使其适合您的需要。
@Injectable()
export class WeatherService {
constructor(private httpService: HttpService) {}
getWeather(city: GetWeatherDto): Observable<AxiosResponse<any>> {
return this.httpService.post(`http://localhost:3000/cities`, city).pipe(
switchMap((response) =>
this.getCityWheaterById(response.data.city_id)),
);
}
private getCityWheatherById(id: string) {
this.httpService
.get(
`https://api.openweathermap.org/data/2.5/weather?
id=${id}&appid=APIKEY&lang=pt_br`,
).pipe(map((response) => response.data)),
}
}
我正在尝试将第一个 API 请求的内容用于另一个 API 请求,但没有成功。我只需要在第一个请求完成后才执行第二个请求。
目前我得到的是:
@Injectable()
export class WeatherService {
constructor(private httpService: HttpService) {}
getWeather(city: GetWeatherDto): Observable<AxiosResponse<any>> {
return this.httpService.post(`http://localhost:3000/cities`, city).pipe(
map((response) => response.data),
tap((data) =>
this.httpService
.get(
`https://api.openweathermap.org/data/2.5/weather?id=${data.city_id}&appid=APIKEY&lang=pt_br`,
)
.pipe(map((response) => response.data)),
),
);
}
}
您可以使用状态代码来确定请求是否成功,如果需要,甚至可以不确定是否有数据。
tap((response) =>
if (response.status == 200){
if (response.data){
this.httpService.get(`https://api.openweathermap.org/data/2.5/weather?id=${data.city_id}&appid=APIKEY&lang=pt_br`,).pipe(map((response) => response.data)),),
}
}
),
我认为你可以使用 switchMap 运算符来达到预期的结果。您可能会进行一些小的更改以使其适合您的需要。
@Injectable()
export class WeatherService {
constructor(private httpService: HttpService) {}
getWeather(city: GetWeatherDto): Observable<AxiosResponse<any>> {
return this.httpService.post(`http://localhost:3000/cities`, city).pipe(
switchMap((response) =>
this.getCityWheaterById(response.data.city_id)),
);
}
private getCityWheatherById(id: string) {
this.httpService
.get(
`https://api.openweathermap.org/data/2.5/weather?
id=${id}&appid=APIKEY&lang=pt_br`,
).pipe(map((response) => response.data)),
}
}