根据redux-observable
,我有这部史诗:
export const someEpic = action$ => {
return action$.pipe(
ofType('FETCH_DATA'),
switchMap(({ payload: { filter, bookingCenter } }) => {
return concat(
of(searchInProgress()),
from(
ApiManager.call('/v1/some-data', {
method: 'GET',
schema: false,
params: {
term: filter,
bookingCenter,
},
})
).pipe(
map(response => {
if (!response) throw 'No result';
return response;
}),
map(({ _embedded }) => updateResult(_embedded)
)
).pipe(retry(2));
})
);
};
如您所见,我有一个重试运算符。基本上,如果服务器未返回任何响应,则会抛出错误并重试。
但是,它仅部分起作用,即在控制台中,我看到调度了searchInProgress
动作,但是用from
创建的第二可观察值不再被执行。
ApiManager.call
返回常规fetch
API承诺。
我做错了什么?
答案 0 :(得分:0)
解决方案是使用defer
,这将推迟从Promise
创建可观察的物体:
defer(() =>
ApiManager.call('/v1/some-data', {
method: 'GET',
schema: false,
params: {
term: filter,
bookingCenter,
limit: 500,
},
})
)