Rxjs глотает ошибки
Имея простой Rxjs
стрим, я столкнулся с такой ситуацией:
Rx.Observable
.fromArray([1,2,3,4,5,6])
// if commented from here
.windowWithCount(2, 1)
.selectMany(function(x) {
return x.toArray();
})
// to here .. the error bubbles up
.subscribe(function(x) {
console.log('x:',x)
throw new Error("AAHAAHHAHA!");
});
с windowWithCount + selectMany
ошибка молча перехватывается внутренне и не может быть перехвачена, а также не сообщается в консоли
комментируя эти 2 блока, ошибка сообщается по крайней мере на консоли
Я не думаю, что это должно быть, или я что-то упустил?
здесь JSBIN
1 ответ
Ваша функция подписки никогда не должна вызывать исключение. RxJs моделирует асинхронные потоки информации, где код наблюдателя часто выполняется асинхронно из кода производителя (например, не в одном и том же стеке вызовов). Вы не можете зависеть от ошибок, распространяющихся обратно к производителю.
Rx.Observable
.fromArray([1,2,3,4,5,6])
// if commented from here
.windowWithCount(2, 1)
.selectMany(function(x) {
return x.toArray();
})
// to here .. the error bubbles up
.subscribe(function(x) {
try {
console.log('x:',x)
throw new Error("AAHAAHHAHA!");
}
catch (e) { console.log('error: ' + e); }
});
При этом похоже, что RxJS "ест" это конкретное исключение, что может быть ошибкой. RxJS делает все возможное, чтобы вызвать ненаблюдаемые исключения в качестве необработанных исключений на хосте. Похоже, в этом случае этот механизм не работает. Вы должны открыть вопрос на GitHub.