有人在吃我的错误,我该如何调试呢?
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');
});
我正在使用 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');
});