【发布时间】:2019-01-30 20:16:00
【问题描述】:
我正在我的 React 应用程序中实现搜索输入,根据结果集的大小,这可能需要几秒钟的时间才能得到来自服务器的响应。我现在遇到的问题是,如果用户搜索具有较大结果集的术语,然后立即搜索具有较小结果集的术语,则第一次搜索在最后一次搜索后返回并覆盖数据,因此在表格上显示不正确的结果。
目前我有一个搜索组件,它在其父组件中调用一个异步函数(该函数可以从多个子组件调用,搜索就是其中之一)。在异步函数内部,我使用搜索查询对服务进行了等待调用。一旦返回结果将被传递给更新某些状态的函数。
我已阅读有关取消令牌的信息,但我不完全确定如何实现这一点。当搜索组件进行初始调用时,将有一个待处理的承诺,直到收到结果。当我再次搜索时,我怎么能忽略第一个承诺的结果?每次我搜索时,我会将承诺存储在组件的一个字段中,并在以后的搜索中以某种方式检查该字段吗?
我在网上阅读了许多可能的解决方案。我正在使用fetch-retry 来处理API 调用,并且宁愿不使用诸如bluebird 或axios 之类的库。我不明白的主要部分是如果将来创建了一个承诺,如何让我的承诺无法解决。
希望我解释得足够清楚!
谢谢
【问题讨论】:
-
ES6 承诺不可取消。故事的结局。这是一个产生可以取消的承诺的事情。 Axios 提供取消。至于 Fetch,它是 developer.mozilla.org/en-US/docs/Web/API/AbortController/abort 。如果您有兴趣获得答案,请考虑提供有关您的案例的具体信息。请不要试图描述代码,这永远行不通。 stackoverflow.com/help/mcve 是代码相关问题所必需的。
-
按照官方文档的建议,一种 React-y 的做法是创建一个可中止的承诺:reactjs.org/blog/2015/12/16/ismounted-antipattern.html
标签: javascript reactjs promise cancellation