【问题标题】:Someone is eating my errors, how can I debug it?有人在吃我的错误,我该如何调试?
【发布时间】:2018-10-31 20:40:38
【问题描述】:

我正在使用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();
  });

即使我用简单的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 会抛出未处理的异常,但在这种情况下不会,为什么?谁吃了我的错误?有什么想法可以调试吗?

【问题讨论】:

  • 在 Firefox 中运行?
  • @trincot 不,Chrome。实际上在任何浏览器(Chrome、Firefox、Safari)中的行为都是一样的。 Firefox 有什么特别之处吗?
  • om nom nom nom...吃掉你所有的美味错误:P
  • 好吧,在 FireFox 中,一些错误仅显示在以 Ctrl+J 打开的窗口中(显示所有窗口的错误)。可能不是这里的问题。

标签: javascript error-handling rxjs superagent


【解决方案1】:

所以我发现谁在吃我的美味错误 - 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');
});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-08-21
    • 2022-10-06
    • 1970-01-01
    • 1970-01-01
    • 2012-05-07
    • 2017-05-09
    • 1970-01-01
    相关资源
    最近更新 更多