如何根据另一个API结果调用API?

时间:2019-08-15 01:18:13

标签: reactjs react-redux rxjs

在React-Redux Epic中,我试图调用get方法1,然后根据第一个method1的结果调用get方法2。

export const testEpic = (action$, state) => {
   return merge(

      action$.pipe(
         ofType(EpicTypes.API1),
         map((action) => {
            const api1Url = `http://10.1.2.345/api1`;
            return ajax.getJSON(loginUrl);
         }),
      ).pipe(
         map((result1) => {
            console.log(`api1 result:`, result1);   // result1 is 
            const {id} = result1;
            const api2Url = `http://10.1.2.345/api2/${id}`;
            return ajax.getJSON(api2Url)
         }),
      ).pipe(
         mpa((result2) => { ....... }
..........

我希望调用api1,将result1转到第二张地图,然后使用result1调用api2,并获取result2。但是,看来api1 result可以观察到。我应该怎么做才能得到result1并在其上进行另一个api调用?

1 个答案:

答案 0 :(得分:1)

map代替concatMap,您应该得到想要的东西。 原因是像concatMap(或switchMap mergeMap)之类的函数在其内部订阅时会收到一个Observable输入,并返回一个可以订阅的新Observable。这样,当订阅了最后一个Observable时,首先执行第一个Observable,第二个Observable可以使用其结果。