약속을 사용하면 오류가 발생했을 때 .then
변종을 사용하여 체인을 분할 할 수 있습니다. 다음은이 날 응답 처리 논리를 건너 뛰고은 원래 가져 오기 문에서 제기 된 오류에 응답 할 수 fetch
RxJS에서 오류가 발생했을 때 분할 관찰 가능
fetch('http://website.com').then(
// Perform some logic
(response) => response.json().then(({ answer }) => `Your answer: ${answer}`),
// Skip json parsing when an error occurs
(error) => 'An error occurred :(',
).then(console.log);
를 사용하는 예입니다. RxJS 비슷한 뭔가 다음과 같습니다 코드 상태의 주석, 나는 단순히 내 약속 체인과 같은 동작을하지 않는 한에서 캐치 연산자를 넣을 수 없습니다
Observable.fromPromise(fetch('http://website.com'))
// if I put .catch here, the result will be piped into flatMap and map
.flatMap(response => response.json())
.map(({ answer }) => `Your answer: ${answer}`)
// if I put .catch here, errors thrown in flatMap and map will also be caught
.subscribe(console.log);
으로.
나는 이것을 실현시킬 수있는 커스텀 연산자를 사용하거나 이것을 관찰 할 수있는 오류를 병합 할 수 있다는 것을 알고있다. 그러나 모든 것은 꽤 과장된 것 같다. 약속 체인 작동을 달성하는 간단한 방법이 있습니까?
두 가지 종류의 오류를 구분하려는 이유는 합리적으로 복구 할 수 있거나 '가져 오기'오류 (예 : 네트워크에 문제가 있음)에서 어떤 종류의 피드백을 줄 수 있기 때문입니다. flatMap 또는 map에서 오류가 발생하면 내 자신의 오류 일 가능성이 높습니다. 따라서 오류가 구독자에게 전파되기를 바랍니다. – Pinpickle
당신의 솔루션이 마음에 들지만, 제 목표는 결과 (이 경우 오류 또는 json을 파싱하는 문자열)를 동일한 관찰 가능 부분에 포함시키는 것입니다. 둘을 병합하는 것이 좋습니다. – Pinpickle
'Observable.fromPromise()'바로 다음에'catch()'를 사용하고 자체 오류 클래스 ('catch()')로 오류를 래핑했을 때보 다 자신의 오류 클래스로 오류를'오류 '신호). 나중에 관찰자에서 오류가 typeof인지 또는 특정 클래스를 구현하는지 확인할 수 있습니다. 이것은 오류가'fromPromise'에서 발생했는지와'catch()'또는 예를 들어서 잡혔는지 확인할 수 있음을 의미합니다. 'map'은 일반적인 오류입니다. 어쩌면 오류를 잡는 'retryWhen()'연산자를 살펴보고 나만의 알림을 기반으로 자동으로 다시 가입 해 봅시다. – martin