我使用阿波羅客戶端進行查詢和突變我GraphQL服務器功能。由於Apollo有它自己的錯誤處理,實現takeUntil函數來取消我的查詢調用和我的變化要困難得多。使用RxJs 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()
函數,我的函數根本無法工作。
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外部,您將取消整個Epic,而不僅僅是特定的apollo-client客戶端。 是啊我的一部分知道,但'mergeUntil'後放置'mergeMap' juste給了我一個錯誤,所以我想我會試一試。 – petithomme
是的,現在,阿波羅客戶端無法自行取消突變。我喜歡你在第二個例子中所做的,但是就像你所說的那樣,它不會取消**突變,而是忽略**結果。我可能會試圖實現它,至少不會向用戶顯示更改,只是呈現他所做的最後一個操作。謝謝你的回答! – petithomme
@petithomme非常歡迎! – jayphelps