Apollo-Client を使用して、GraphQL サーバーへのクエリとミューテーションを作成しています。Apollo には独自のエラー処理があるため、takeUntil 関数を実装してクエリ呼び出しとミューテーションをキャンセルするのは非常に困難です。
Apollo を使用すると、私のミューテーションは次のようになります。
export const languageTimeZoneEpic = (action$) => {
return action$.ofType(CHANGE_LANGUAGE)
.mergeMap(action => client.mutate({
mutation: languageMutation,
variables: { id: action.id, language: action.selected_language }
}).then(result => changeLanguageFulfilled(result))
.catch(error => changeLanguageError(error))
);
};
私のミューテーションは問題なく作成され、エラーがあればそれをキャッチします。ここでの問題は、takeUntil()
以下の例のように関数を追加すると、関数がまったく機能しなくなることです。
export const languageTimeZoneEpic = (action$) => {
return action$.ofType(CHANGE_LANGUAGE)
.mergeMap(action => client.mutate({
mutation: languageMutation,
variables: { id: action.id, language: action.selected_language }
}).then(result => changeLanguageFulfilled(result))
.catch(error => changeLanguageError(error))
).takeUntil("END_LANGUAGE");
};
takeUntil()
独自のエラーハンドリングを持つクライアントを使用していても 、関数を使用できる方法がないか疑問に思っていました。
* ここでの takeUntil() は、ミューテーションが完了する前に別のアクションをディスパッチすると呼び出されます。
ありがとうございました