有人在吃我的错误,我该怎么调试呢?

时间:2016-06-13 18:56:36

标签: javascript error-handling rxjs superagent

我正在使用Router1编写反应应用程序。以下是最终订阅的结果:

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();
  });

即使我用简单的Observable.throw(1).subscribe();替换throw 1 - 结果是相同的,控制台和流中的消息也不会被破坏。

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

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

所以默认情况下rx会抛出未处理的异常,但在这种情况下不会抛出,为什么?谁吃我的错误?任何想法如何调试它?

1 个答案:

答案 0 :(得分:0)

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

以下是如何向superagent提供错误的示例:

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');
});