私は、Apollo-Clientを使って、GraphQLサーバに対してクエリと突然変異を作成しています。 Apolloには独自のエラー処理があるので、takeUntil関数を実装してクエリ呼び出しと私の突然変異をキャンセルするのはずっと難しくなります。アポロを使用してRxJsのtakeUntil()関数をapollo-clientで使用する
、ここに私の変異は次のようになります。
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()が呼び出されます。
は
>分離の問題もあります。 takeUntilをmergeMapの外側に置くと、特定のapollo-clientクライアントだけでなく、Epic全体がキャンセルされます。 私の一部はそれを知っていましたが、 'mergeMap'の後に' takeUntil'を置くとjusteは私にエラーを与えました。私はそれを試してみると思っていました。 – petithomme
はいApollo-clientは、今のところ、突然変異をそれ自身でキャンセルする方法はありません。私はあなたの2番目の例で行ったことが好きですが、あなたが言ったように、変異を取り消すことはありません**しかし、**結果を無視するだけです。私は少なくともユーザーに変更を表示せずに、彼が最後に行った操作をレンダリングするように実装しようとするかもしれません。答えてくれてありがとう ! – petithomme
@petithomme大歓迎です! – jayphelps