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)),
  }
}