redux-observableを使用しています。apiでデータの取得に失敗した場合にエラーハンドリングを行いたいのですが、上手くいきません。
typescript
1const commentsFetchingEpic: Epic<IPayloadAction> = (actions$) => actions$.pipe( 2 ofType(commentsActions.fetch.started.type), 3 mergeMap((action: IPayloadAction) => concat( 4 of(commentsActions.loading({ isLoading: true })), 5 from(getComments(action.payload.url)).pipe( 6 map((comments: IComments[]) => commentsActions.fetch.done({ params: action.payload.url, result: { comments } })), 7 catchError(error => of(commentsActions.fetch.failed({ params: action.payload.url, error: { hasError: true } }))), 8 ), 9 of(commentsActions.loading({ isLoading: false })), 10 )), 11);
getCommentsがapi部分で、エラーの際にrejectするようになっています。
typescript
1import 'whatwg-fetch'; 2 3export interface IComments { 4 id: string; 5 comment: string; 6} 7 8const getComments = (url: string) => { 9 return new Promise((resolve, reject) => { 10 fetch(url) 11 .then((response: any) => response.json()) 12 .then(comments => resolve(comments)) 13 .catch((e: any) => reject(e)); 14 }) 15} 16 17export default getComments;
ドキュメントのやりかたとしては、これであっているはずなのですが。。。
エラーの場合でもcatchError
は実行されず、map
が実行されてresult: {comments}
のcomments
に"Not found"が入ってしまいます。api部分を、async await使ってerrorをcatchした場合にthrow new Error(e)
なども試してみましたが、どれもうまくいかず。。
どなたか原因を推察できるかた、お助けお願いします。

回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。