【问题标题】:Cancelling in-flight request at middleware or client side?在中间件或客户端取消正在进行的请求?
【发布时间】:2021-06-24 18:05:50
【问题描述】:

在我们的应用程序中,我们使用fetch 访问中间件,而中间件又使用axios 调用后端API。我制作了一个搜索栏,我想在每次按键时调用 API 调用。我想在发生新按键时取消正在进行的请求。我想知道,我应该在哪里编写取消飞行中请求的逻辑?在客户端还是在中间件中,为什么?

【问题讨论】:

  • 与其取消,不如使用debounce函数?
  • @Yousaf - 应该同时使用。
  • @Yousaf 即使使用 debounce,我也需要取消正在进行的请求,因为 API 需要一些时间才能返回结果。
  • 要取消使用 fetch 发出的请求,请查看 AbortController
  • 我会在发起请求的一方 - 客户端执行此操作。原因是发起请求的一方应该控制是否取消请求。

标签: javascript node.js axios fetch middleware


【解决方案1】:

编辑:评论@Yousaf 在 cmets 中所说的话。如果您将其视为取消请求的完整域逻辑,您绝对应该明确表示并在客户端处理它。如果它是一种性能/数据优化,那么您可能不想仅仅为了获得这种收益而弄乱您的客户端代码。在这种情况下,最好在事物的中间件方面创建整体优化。我认为这应该让作者了解他们是否希望在客户端或中间件端实现某些东西。

在第二个链接中,您可以看到如何将 AbortController 作为信号属性传递给 Axios 调用。您可能已经知道这一点,并且想知道如果对 Axios 的实际调用是在您无法直接控制的中间件中完成的,您应该如何处理。

在这种情况下,了解您正在使用的中间件很重要,因为它可能已经支持取消请求。如果您自己管理中间件,这是您可以编写的功能。

如果是这样,您可以实现切换行为,如果有新请求进入(如果它们出于相同目的),您总是会取消正在进行的请求。这可能是匹配 URL 和意图的混合,例如,您可以使用命名空间对其进行建模。

【讨论】:

    猜你喜欢
    • 2021-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-09
    相关资源
    最近更新 更多