Я использую асинхронный канал Angular2 для потока значений в DOM. Вот простой пример:
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>
Что бы я хотел сделать, так это отобразить последовательность 1-5, но в элементе ошибки (3) каким-то образом заполнить #error
div сообщением об ошибке.
Это, по-видимому, требует двух вещей: во-первых, способность асинхронного канала Angular делать что-то интеллектуальное с ошибками, которое я не вижу. Глядя на исходный код, по-видимому, он генерирует исключение JS, которое не выглядит слишком дружелюбным.
Во-вторых, это возможность перезапуска или продолжения последовательности после ошибки. Я читал о catch
и onErrorResumeNext
и т.д., Но все они связаны с другой последовательностью, на которую будет включена ошибка. Это значительно усложняет логику генерации потока, на котором я хотел бы просто поместить ряд чисел (в этом простом примере). У меня есть ощущение тонуса, что, как только возникает ошибка, игра завершена, и наблюдаемое завершено и может быть только "перезапущено" с другим наблюдаемым. Я все еще изучаю наблюдаемые; это на самом деле случай?
Итак, мой вопрос двоякий:
- Может ли Angular2 асинхронная труба сделать что-то умное с ошибками?
- Есть ли у наблюдателей некоторый простой способ продолжить работу после ошибки?