Używam rury asynchronicznej Angular2 do strumieniowania wartości do DOM. Oto prawdziwy prosty przykład:Obsługa błędów za pomocą rury asynchronicznej Angular2
const stream = Observable.interval(1000)
.take(5)
.map(n => { if (n === 3) throw "ERROR"; return n; });
<div *ngFor="for num of stream | async">
{{num}}
</div>
<div id="error"></div>
Co chciałbym zrobić, to mieć sekwencję 1-5 wyświetlanej, ale na przedmiocie błędu (3), jakoś zapełnić #error
div z komunikatem o błędzie.
Wydaje się, że wymaga to dwóch rzeczy: po pierwsze umiejętność rurek asynchronicznych Angular do zrobienia czegoś inteligentnego z błędami, którego nie widzę. Patrząc na kod źródłowy, najwyraźniej generuje wyjątek JS, który nie wydaje się zbyt przyjazny.
Druga to możliwość ponownego uruchomienia lub kontynuowania sekwencji po wystąpieniu błędu. Przeczytałem o catch
i onErrorResumeNext
i tak dalej, ale wszystkie one obejmują inną sekwencję, która zostanie przełączona na błąd. To bardzo komplikuje logikę generowania strumienia, na którym chciałbym umieścić serię liczb (w tym prostym przykładzie). Mam wrażenie, że po wystąpieniu błędu gra się kończy, a obserwowalna jest zakończona i może zostać "ponownie uruchomiona" z innym obserwowalnym. Wciąż uczę się obserwowalnych; czy tak rzeczywiście jest?
Więc moje pytanie jest dwojaki:
- Czy rura asynchroniczny Angular2 za coś inteligentnego z błędami?
- Czy obserwowalne mają prosty sposób kontynuacji po wystąpieniu błędu?
Rozumiem, musimy użyć rura asynchroniczna, tylko wtedy, gdy jesteśmy pewni, że nie ma błędów, czy to prawda? – refactor