如何使用带有 redux observable 的 RxJs 对第一个 HTTP 响应中的每个项目发出请求?
How to make a request for each item in the first HTTP response using RxJs with redux observable?
我有两个微服务(用户和付款),我想获取用户的付款信息。
所以首先我从用户微服务中获取用户 (GET /users/):
[{userId: 1, name: 'john', ...}, {userId: 2, name: 'mark', ...}, {userId: 3, name: 'bob', ...}]
然后我想为每个用户获取付款。我需要向支付微服务发送请求 (GET /payments/userId)
预期结果。-
[
{userId: 1, name: 'john', ..., payments: [1,2,3]},
{userId: 2, name: 'mark', ..., payments: [2,3,4]},
{userId: 3, name: 'bob', ..., payments: [3,4,5]}
]
我有这个代码来获取用户。
const fetchUsersEpic = action$ =>
action$.ofType(FETCH_USERS).flatMap(action =>
Observable.concat(
Observable.of(actions.loading(true)),
Observable.fromPromise(usersService.getUsers())
.flatMap(response =>
//I need to fetch payments for each user first
Observable.concat(
Observable.of(actions.loading(false)),
Observable.of(actions.fetchUsersFulfilled(response)),
))
.catch(error => Observable.of(actions.loading(false))),
));
您的服务return 一个承诺?你可以这样试试
这样试试:
users = await usersService.getUsers();
users = users.map(user => ({
...user,
payments: await paymentsService.getPayments(user.userId),
}));
我有两个微服务(用户和付款),我想获取用户的付款信息。 所以首先我从用户微服务中获取用户 (GET /users/):
[{userId: 1, name: 'john', ...}, {userId: 2, name: 'mark', ...}, {userId: 3, name: 'bob', ...}]
然后我想为每个用户获取付款。我需要向支付微服务发送请求 (GET /payments/userId)
预期结果。-
[
{userId: 1, name: 'john', ..., payments: [1,2,3]},
{userId: 2, name: 'mark', ..., payments: [2,3,4]},
{userId: 3, name: 'bob', ..., payments: [3,4,5]}
]
我有这个代码来获取用户。
const fetchUsersEpic = action$ =>
action$.ofType(FETCH_USERS).flatMap(action =>
Observable.concat(
Observable.of(actions.loading(true)),
Observable.fromPromise(usersService.getUsers())
.flatMap(response =>
//I need to fetch payments for each user first
Observable.concat(
Observable.of(actions.loading(false)),
Observable.of(actions.fetchUsersFulfilled(response)),
))
.catch(error => Observable.of(actions.loading(false))),
));
您的服务return 一个承诺?你可以这样试试
这样试试:
users = await usersService.getUsers();
users = users.map(user => ({
...user,
payments: await paymentsService.getPayments(user.userId),
}));