【问题标题】:Ngrx handle API failureNgrx 处理 API 失败
【发布时间】:2020-06-10 13:13:10
【问题描述】:

这个问题与ngrx example-app提供的示例有关(我不知道我是否可以将其发布到他们的Github页面......)

因此,在创建新项目时,我希望遵循最佳准则,这就是为什么我要检查示例应用程序作为参考。例如,在应用程序中,当他们尝试删除书籍实体时,请执行以下操作:

  1. 组件分派请求,将操作“removeBook”和“book”对象作为有效负载 (selected-book-page.component.ts:40)
  2. 效果会处理该问题,如果成功,它会调用“removeBookSuccess”操作,将图书从商店中移除 (collection.effects.ts:65)

现在第二种情况是,当它失败时,它也会使用 book 对象调用“removeBookFailure”,实际上该操作将完全像“addBookSuccess”一样处理

on(
    CollectionApiActions.addBookSuccess,
    CollectionApiActions.removeBookFailure,
    (state, { book }) => {
      if (state.ids.indexOf(book.id) > -1) {
        return state;
      }
      return {
        ...state,
        ids: [...state.ids, book.id],
      };
    }
  ),

我们真的需要这样做吗?我的意思是,有问题的书从一开始就没有被删除。还是我在这里遗漏了什么。

感谢您的帮助!

【问题讨论】:

  • 我想知道这是否最初是作为一个乐观的删除,CollectionApiActions.removeBook 删除该书(reducer)?
  • 这也是我的猜测,但他们并没有从状态中删除 id,只有在成功之后..
  • @fzwael 我在 github 上创建了问题。一旦核心团队决定应该采用哪种方式,请告诉我您是否想做 PR(如果您以前没有做过,我建议您这样做)
  • @AndrewAllen 是的,我可以创建一个 PR,但如果真的有必要,我们不应该与核心团队核实吗?
  • 其实是的,因为在下一行有一个条件if (state.ids.indexOf(book.id) > -1) 所以这是真的,我们不会添加另一本书。但问题是这总是正确的,所以不需要代码(即使我们保留它时没有问题)

标签: angular typescript rxjs ngrx


【解决方案1】:

这可能看起来很奇怪,但它服务于 API 故障。 我所期望的以及缺少的是在发送removeBook 操作时移除这本书。

如果 API 调用成功,则一切都已正确处理 - 但如果失败,我们应该恢复删除图书。

【讨论】:

  • 我同意,但是如果您检查示例应用程序中的流程,则不会因为我们首先调用 API 而删除图书本身,然后再决定是否从商店中删除图书(当success ) 所以在我看来,放回现有项目的操作是多余的。无论如何,从工作流程的角度来看,这并不是一个真正的错误。
猜你喜欢
  • 2012-05-10
  • 2016-05-24
  • 2018-12-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多