1

我正在使用 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)工作。在我找到的少量文档中,它建议我放在error =>Observable of之后,但它给了我一个错误,说Observable is undefined

谢谢

更新:

如果应用程序和服务器之间的连接不起作用,它只是等待连接恢复,然后完成史诗。我希望它能够捕获并出错并停止史诗。

4

1 回答 1

0

发现上面的代码没有任何问题catch(error)。事实证明,当我尝试建立连接时,暂停服务器并没有引发错误。它必须被关闭才能引发错误。

对于那些正在寻找一种使用带有redux-observable的Apollo-client实现突变的好方法的人(因为上面几乎没有文档),这是我用于突变的代码:

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 的操作。

希望这可以帮助某人。

于 2017-07-04T18:04:26.107 回答