有人在吃我的错误,我该如何调试呢?

Someone is eating my errors, how can I debug it?

我正在使用 Router1 编写一个 React 应用程序。这是最终订阅的样子:

router
  .renderResult()
  .forEach(() => {
    window.ga('send', 'pageview', window.location.pathname);
  });

此流抛出错误(未处理的错误),但我没有在控制台中看到它。如果我在 forEach 中放置 onError 回调 - 我可以记录错误。

如果我修复流中的错误并在其中创建另一个流,则会引发错误,我在控制台中看不到消息:

router
  .renderResult()
  .forEach(() => {
    window.ga('send', 'pageview', window.location.pathname);
    Observable.throw(1).subscribe();
  });

即使我用简单的 throw 1 替换 Observable.throw(1).subscribe(); - 结果是一样的,控制台和流中的消息都没有被破坏。

但是如果我修复了流中的错误,并创建了另一个在超时后抛出错误的流,我会看到很棒的消息 "rx.all.js:77 Uncaught 1"。

router
  .renderResult()
  .forEach(() => {
    window.ga('send', 'pageview', window.location.pathname);
    setTimeout(() => Observable.throw(1).subscribe(), 1000);
  });

所以默认情况下 rx 会抛出未处理的异常,但在这种情况下不会,为什么?谁吃了我的错误?有什么办法可以调试吗?

所以我发现是谁在吃我的美味错误 - superagent@2.0.0。 Issue is already fixed并将在下一个版本中发布。

以下是如何将错误反馈给超级代理的示例:

import { Observable } from 'rx';
import superagent from 'superagent';

const request = superagent.get('/');
Observable.defer(
  Observable.fromNodeCallback(request.end, request, res => res.body)
).subscribe(() => { 
  throw new Error('tasty error');
});