2017-07-04 2 views
1

Ich mache eine Mutation mit Apollo-Client und redux beobachtbare und so weit dies ist mein Code:Fehlerbehandlung Apollo-Client mit redux beobachtbare

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' 
    })); 
}; 

Meine Mutation korrekt funktioniert aber Ich kann nicht scheinen, meine catch(error) Arbeit zu machen. In der kleinen Menge an Dokumentation ich dazu gefunden habe, schlägt es mich Observable of nach Fehlern setzen => aber dann gibt es mir eine Fehlermeldung, beobachtbareundefined ist.

Danke

UPDATE:

Wenn die Verbindung zwischen der App und dem Server nicht funktioniert, es wartet nur für die Verbindung nach oben zu kommen und dann den epischen Abschluss. Ich möchte dafür einfach fang und Fehler machen und das Epos stoppen.

Antwort

0

Es stellte sich heraus, dass nichts mit der catch(error) im obigen Code falsch war. Stellt sich heraus, dass der Server in die Warteschleife geworfen wurde, warf keine Fehler, wenn ich versuchte, eine Verbindung herzustellen. Es musste heruntergefahren werden, damit es einen Fehler gab.

Für diejenigen, die für eine gute Art und Weise suchen, um eine Mutation mit Apollo-Client mit redux beobachtbare zu implementieren (weil es so gut wie keine docs drauf ist), hier ist der Code, den ich für meine Mutation verwendet:

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)) 
); 
}; 

Sowohl changeLanguageFulfilled als auch changeLanguageError sind Aktionen, die ihren eigenen Reducer auslösen.

Ich hoffe, das hilft jemandem.