1

我有 2 个 REST API。来自这两个 API 的数据都是必需的。同时,第二个 API 将 API 1 的输入作为参数。

GET api/one --> {id: 3},GET api/two 需要这个响应id?inputFromApiOne=3 --> {name: 'SS'}

我在组件中可用的最终响应应该是 -

{
  "id": 3, -- from API One
  "name": "SS" -- from API Two
}

我已经使用解析器从 API One 获取数据,但无法将其用作第二个解析器的输入。

我还尝试从 resolver1 中的两个 API 获取数据。我使用了 flatMap,但最后我只得到了来自第二个 API 的数据。

resolve(route: ActivatedRouteSnapshot) {
  return this.myService.getDataFromApiOne(route.params.id).pipe(flatMap(data => {
    return this.myService.getDataFromApiTwo(data.someKey.id);
  }));
}
4

2 回答 2

1

我希望您在路由配置中指定了两个解析器,例如

 {
    path: '', 
    component: MyComponent,
    resolve: {
      fromResolverOne: Resolver1
      fromResolverTwo: Resolver2
   }
}

然后在你的组件中

const resolverOneData = this.route.snapshot.data['fromResolverOne'];
const resolverTwoData = this.route.snapshot.data['fromResolverTwo'];
于 2020-04-12T11:48:55.943 回答
0

我只能通过等待异步来实现这一点。

@Injectable()
export class MyResolverService implements Resolve<any> {

 constructor(private myService: MyService) { }

 async resolve(route: ActivatedRouteSnapshot) {
   const dataFromApiOne = await 
   this.myService.getMediumDetails(route.params.id).toPromise();
   const dataFromApiTwo = await this.myService.getPageConfig(dataFromApiOne.id).toPromise();
   return { dataFromApiOne, dataFromApiTwo };
 }
}

然后在我的组件中,我只是从路由快照中获取数据。

this.dataFromBothApi = this.route.snapshot.data.myData
于 2020-04-12T14:08:44.003 回答