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.

Другие вопросы по тегам