2017-01-11 6 views
0

У меня есть наблюдаемый, который прослушивает событие keyup с входа.Горячая наблюдаемая обработка ошибок

В каждом keyup он делает запрос на сервер, а если нет никаких значений, он выдает исключение.

.map(function (oResp) { 
    if (oResp.data.results.length === 0) { 
    throw new Error(self.getTextBundle("insPlantInvalid")); 
    } 
    return oResp.data.results; 
}) 

После того, как исключение было брошено, наблюдаемый больше не будет слушать событие.

Работает ли обработка исключений в rxjs?

ответ

1

Да, это правильное поведение. Исключение составляет уведомление operator send an error. Оба сигнала error или complete должны быть последними сигналами, а также cause unsubscription.

Чтобы переоформить подписку или обработки ошибок Есть операторы, такие как retry(), retryWhen(), catch() или onErrorResumeNext(). Думаю, вы уже знаете это.

+0

Я попробовал его с помощью 'catch()', и поток также будет отменен после этого? –

+0

@zero_coding Вы пытались с помощью 'catch()'? С помощью 'catch()' вы можете подписаться на другой Observable вместо источника. – martin

+0

В моем случае, когда пользователь вводил недопустимое значение в поле ввода, он будет отмечать поле ввода красным цветом. Поэтому, когда пользователь вводит допустимое значение, красный цвет будет удален. Лучше разрешить с помощью 'retryWhen()'? –

0

.catch() также может использоваться для обработки ошибок.

this.http.get('url').map(res => res.json()).catch(() => Observable.of({error: true}) 

Это возвращает {error: true} в случае ошибки и события наблюдаемого не сломают. Но в операторе карты, который приходит рядом с этим ответом, нужно обрабатывать этот случай.

 Смежные вопросы

  • Нет связанных вопросов^_^