发现了一个与去抖输入和处理响应相关的错误。用于处理Angular中最新的异步请求响应的模式?
我有一个搜索输入,可以在您输入时查询服务器。我把它的反弹设置为300ms。但是,有时会出现一些奇怪的行为:
用户类型“ab”等待300ms,在第一个请求解析之前键入“c”。在搜索栏中他们看到“abc”,但现在有两个网络请求。有时第二个请求(“abc”)首先解析,然后第一个请求(“ab”)解析并覆盖结果列表。因此,用户看到“ab”的结果列表,但搜索输入具有“abc”。
这看起来似乎不是一个反弹本身的问题,更多的是寻找放弃“旧”承诺的方式,以便在解决时可以忽略它们。
因此,例如- 我想要
- 类型
"ab"
- 发送请求 “AB”
- 类型
"c"
- 发送请求 “ABC”
- “ABC”返回响应,处理承诺分辨率
- “AB”返回响应,忽略承诺
是否有任何共同的模式/接近了这样的事情在角?这听起来像是一个普遍的问题。
E.g“仅解决创建的最新承诺”?
你可以提供理解你的代码? – Grundy
用'Promises'解决这个问题的确很困难。上面描述的问题是将'RxJS'引入到您的应用程序中的完美用例。使用'RxJS',你有''distinctUntilChanged()'和'switchMap()'等操作符来解决这个问题。 – Dieterg
您可以创建队列,请参阅http://stackoverflow.com/questions/26859275/make-a-jquery-function-wait-till-its-previous-call-has-been-resolved/。虽然问号标签'jquery'模式也可以使用原生的'Promise' – guest271314