我正在使用Apollo-client和redux-observable进行变异,到目前为止这是我的代码:
export const languageTimeZoneEpic = (action$) => {
return action$.ofType('PING')
.flatMap(action => client.mutate({
mutation: languageTimeZoneIdMutation,
variables: { id: action.id, defaultLanguage: action.selected_language, defaultTimeZoneId: action.selected_timeZone }
})
.then(store.dispatch(setLocale(action.selected_language)))
)
.map(result => ({
type: 'PONG',
payload: result
}))
.catch(error => ({
type: 'PONG_ERROR'
}));
};
我的变异工作正常,但我似乎无法使catch(error)
工作。在我发现的少量文档中,它建议我将Observable of
放在 error => 之后但是它会给我一个错误,说可观察 未定义。
谢谢
更新
如果应用程序和服务器之间的连接不起作用,它只是等待连接重新启动然后完成史诗。我想它只是捕捉和错误并停止史诗。
答案 0 :(得分:0)
在上面的代码中发现catch(error)
没有任何问题。当我尝试建立连接时,关闭服务器并没有抛出错误。它必须关闭才能发出错误。
对于那些正在寻找使用 Apollo-client 和 redux-observable 实现变异的好方法的人(因为它上面几乎没有文档),这里是我用于突变的代码:
import { languageMutation } from '../mutation/languageMutation';
import { changeLanguageFulfilled, changeLanguageError } from '../actions/actions';
export const languageEpic = (action$) => {
return action$.ofType('CHANGE_LANGUAGE')
.mergeMap(action => client.mutate({
mutation: languageMutation,
variables: { id: action.id, defaultLanguage: action.selected_language, defaultTimeZoneId: action.selected_timeZone }
}).then(result => changeLanguageFulfilled(result))
.catch(error => changeLanguageError(error))
);
};
changeLanguageFulfilled和changeLanguageError都是触发自己的reducer的动作。
希望这有助于某人。