Обнаружена ошибка, связанная с отклоненным вводом и обработкой ответов.
У меня есть поисковый ввод, который запрашивает сервер по мере ввода. Я поставил debounce на него, установленный на 300 мс. Однако иногда наблюдается странное поведение:
Пользователь вводит «ab», ждет 300 мс, вводит «c» до того, как первый запрос будет разрешен. В строке поиска они видят "abc", но сетевых запросов теперь два. Иногда второй запрос ("abc") разрешается первым, затем первый запрос ("ab") разрешается и перезаписывает список результатов. Таким образом, пользователь видит список результатов для «ab», но в поисковом запросе есть «abc».
Это похоже не столько на проблему отказа как таковую, сколько на поиск способа отказаться от «старых» обещаний, чтобы их можно было игнорировать, когда они разрешатся.
Так например - что я хочу
- типы
"ab"
- отправить запрос "ab"
- типы
"c"
- отправить запрос "abc"
- "abc" возвращает ответ, обрабатывает обещание разрешения
- "ab" возвращает ответ, игнорирует обещание
Существуют ли какие-либо общие шаблоны/подходы для такого рода вещей в Angular? Похоже, это будет общая проблема.
Например, «Разрешить только последнее обещание, которое было создано»?
Promises
. Проблема, которую вы описали выше, является идеальным вариантом использования для внедренияRxJS
в ваше приложение. СRxJS
у вас есть такие операторы, какdistinctUntilChanged()
иswitchMap()
, чтобы решить эту проблему. - person Dieterg   schedule 22.04.2016jquery
также воспроизводится с использованием собственногоPromise
- person guest271314   schedule 22.04.2016