Il mio caso d'uso è mappare un'azione Observable to redux di successo e fallimento. Faccio una chiamata di rete (con una funzione che promette), se riesce, devo inoltrare un'azione di successo, se fallisce di un'azione di errore. L'Osservabile stesso andrà avanti. Per quanto ho potuto cercare, RxJS non ha un meccanismo per catturare l'errore e riprovare l'originale. Ho seguente soluzione nel mio codice, che non sono felice con:RxJS catch ** e ** riprova un Observable
error$ = new Rx.Subject();
searchResultAction$ = search$
.flatMap(getSearchResultsPromise)
.map((resuls) => {
return {
type: 'SUCCESS_ACTION',
payload: {
results
}
}
})
.retryWhen((err$) => {
return err$
.pluck('query')
.do(error$.onNext.bind(error$));
});
searchErrorAction$
.map((query) => {
return {
type: 'ERROR_ACTION',
payload: {
query,
message: 'Error while retrieving data'
}
}
});
action$ = Observable
.merge(
searchResultAction$,
searchErrorAction$
)
.doOnError(err => console.error('Ignored error: ', err))
.retry();
action$.subscribe(dispatch);
cioè creo un soggetto, e spingere gli errori in quel soggetto e creare un 'osservabile di azioni di errore da questo.
Esiste un'alternativa migliore a RxJS che mi manca? Fondamentalmente voglio emettere una notifica di quale errore si è verificato, e quindi continuare con ciò che l'Observable sta già facendo.
Ah! L'osservabile nidificato. Perché non ci ho pensato! Immagino che ci vorrà più tempo per abituarsi al mondo Osservabile. Grazie. – channikhabra