使用rxjs时如何获取错误的堆栈跟踪?

时间:2016-10-15 22:23:45

标签: javascript angular google-chrome-devtools rxjs angular-cli

我正在使用angular-cli构建一个小的angular2 web应用程序,我正在使用chrome dev-tools进行调试。

显然,如果我需要猜测每次错误的来源以及该错误的堆栈跟踪是什么,我做错了。

以此错误为例:

error_handler.js:45EXCEPTION: Cannot read property 'provider' of nullErrorHandler.handleError @ error_handler.js:45
error_handler.js:50ORIGINAL STACKTRACE:ErrorHandler.handleError @ error_handler.js:50
error_handler.js:51TypeError: Cannot read property 'provider' of null
    at MapSubscriber.project (auth.effects.ts:80)
    at MapSubscriber._next (map.js:77)
    at MapSubscriber.Subscriber.next (Subscriber.js:89)
    at DistinctUntilChangedSubscriber._next (distinctUntilChanged.js:72)
    at DistinctUntilChangedSubscriber.Subscriber.next (Subscriber.js:89)
    at MapSubscriber._next (map.js:83)
    at MapSubscriber.Subscriber.next (Subscriber.js:89)
    at MapSubscriber._next (map.js:83)
    at MapSubscriber.Subscriber.next (Subscriber.js:89)
    at RefCountSubscriber.Subscriber._next (Subscriber.js:125)ErrorHandler.handleError @ error_handler.js:51
zone.js:355Unhandled Promise rejection: Cannot read property 'provider' of null ; Zone: <root> ; Task: Promise.then ; Value: TypeError: Cannot read property 'provider' of null(…) TypeError: Cannot read property 'provider' of null
    at MapSubscriber.project (http://localhost:4200/main.bundle.js:35342:83)
    at MapSubscriber._next (http://localhost:4200/main.bundle.js:4171:35)
    at MapSubscriber.Subscriber.next (http://localhost:4200/main.bundle.js:395:18)
    at DistinctUntilChangedSubscriber._next (http://localhost:4200/main.bundle.js:25485:30)
    at DistinctUntilChangedSubscriber.Subscriber.next (http://localhost:4200/main.bundle.js:395:18)
    at MapSubscriber._next (http://localhost:4200/main.bundle.js:4177:26)
    at MapSubscriber.Subscriber.next (http://localhost:4200/main.bundle.js:395:18)
    at MapSubscriber._next (http://localhost:4200/main.bundle.js:4177:26)
    at MapSubscriber.Subscriber.next (http://localhost:4200/main.bundle.js:395:18)
    at RefCountSubscriber.Subscriber._next (http://localhost:4200/main.bundle.js:431:26)consoleError @ zone.js:355
zone.js:357Error: Uncaught (in promise): TypeError: Cannot read property 'provider' of null
    at resolvePromise (http://localhost:4200/main.bundle.js:93214:31)
    at http://localhost:4200/main.bundle.js:93191:13
    at ZoneDelegate.invoke (http://localhost:4200/main.bundle.js:92988:28)
    at Zone.run (http://localhost:4200/main.bundle.js:92881:43)
    at http://localhost:4200/main.bundle.js:93247:57
    at ZoneDelegate.invokeTask (http://localhost:4200/main.bundle.js:93021:37)
    at Zone.runTask (http://localhost:4200/main.bundle.js:92921:47)
    at drainMicroTaskQueue (http://localhost:4200/main.bundle.js:93153:35)consoleError @ zone.js:357 

问题:

这个错误对我没有任何意义。它完全是用途和不可读的。 我很幸运,因为我看到了这一行(有时候我没有得到任何错误指示):at MapSubscriber.project (auth.effects.ts:80) - 这一行是唯一可以帮助我了解如何修复该错误的行。 试图理解堆栈跟踪将是毫无意义的,因为它的所有rxjs堆栈跟踪。

我的问题:

我想知道我的代码的堆栈跟踪。这可能吗?

  1. 在我的代码中,对该可观察对象的订阅发生。
  2. 如果它是来自ngrx的可观察对象,那么在我的代码中,有人会调动导致错误的操作。
  3. 关于如何使用rxjs调试异步代码然后修复此特定错误的更一般性问题。

1 个答案:

答案 0 :(得分:1)

它发生在您向map运算符提供的投影方法中。线索位于堆栈的顶部。 MapSubscriber.project

基本上你从顶部读取堆栈跟踪。最常见的调用是抛出(或重新抛出)错误的位置。

在RxJS 5中,每个运营商通常会有两到三个呼叫。每个运营商都有一个以其命名的用户来完成工作。 MapSubscriber.Subscriber.next MapSubscriber._next