【问题标题】:How do I debug ngrx/store?如何调试ngrx/store?
【发布时间】:2016-11-24 23:06:56
【问题描述】:

我遇到了 Angular 2 和 ngrx/store 的特定代码状态,我的应用程序完全中断(路由不工作,数据不出现,路由回前一个,以及所有其他类型的可能灾难),但我我不知道如何调试商店周围发生的事情。 redux dev-tools 是一个很棒的工具,但它似乎无法捕捉错误。

我已将.catch 语句放置在我的选择器、效果器和.subscribe() 语句之前,尝试了两种变体:

return state$.select(state => state.user)
  .map(user => user.collection)
  .catch((error, caught) => {
      console.log('error getCollection');
      return caught;
  });

return state$.select(state => state.user)
  .map(user => user.collection)
  .catch((error) => {
      console.log('error getCollection');
      return Observable.throw(error);
  });

控制台仍然保持沉默。我根本不相信除了商店之外会有任何其他“单一错误来源”。

此代码不会为我捕获错误。应该吗?:

.do(() => {
    Observable.throw('fake error');
})
.catch(error => {
    console.error(error);
    return Observable.throw(error);
});

谁能告诉我如何调试整个商店中使用的可观察对象?

【问题讨论】:

    标签: angular ngrx


    【解决方案1】:

    使用 .do() 记录流 - 这将修复它

    您需要通过 RXJS 导入添加 do 运算符。

    return state$
      .do(() => { // log here } )
      .select(state => state.user)
      .map(user => user.collection)
      .catch((error, caught) => {
          console.log('error getCollection');
          return caught;
      });
    

    【讨论】:

    • 但是它应该如何向我提供有关正在发生的错误事情的信息,因为它会无条件地记录?
    • 它正在记录它从流中发出的内容
    • 你也可以做... .map.do 看看地图在做什么...等等
    • 感谢您的想法,但它基本上复制了我在 Chrome 中 ngrx/store-devtools 的 Redux 选项卡中看到的所有内容。我真的很想知道渔获物有什么不好。此代码不会捕获错误。应该是? ``` .do(() => { Observable.throw('fake error'); }) .catch(error => { console.error(error); return Observable.throw(error); }); ```
    • 您的订阅有 3 个功能。第一个是NEXT。第二个是错误。第三个是完整的。返回 Observable.throw 结束流并调用 ERROR 块。如果这不是您想要的返回 Observable.from(['somethingToEmitToNextFunction']) 以防止流倒下并调用 NEXT 函数。或者从 catch 块中返回 Observable.empty() 以不做任何事情(将阻止流倒下)。您可以尝试其他回报...见github.com/ReactiveX/RxJava/wiki/Creating-Observables
    猜你喜欢
    • 2019-12-16
    • 2017-08-30
    • 1970-01-01
    • 2018-03-30
    • 2017-09-08
    • 1970-01-01
    • 1970-01-01
    • 2019-06-07
    • 1970-01-01
    相关资源
    最近更新 更多