const searchResults = keyPresses.throttle(250).map(
key => getJSON('searchResults?q='+input.value).retry()
).switchLatest();
searchResults.forEach(
result => updateSearchResults(resultSet),
error => showMessage('the server appears to be down')
)
У меня есть вопросы или разъяснения ниже
note
- я буду использовать фигурные скобки для представления наблюдаемых
1. Как выглядит searchResults на каждом шаге?
Допустим, я нажимаю abcdef, что будет делать дроссель, это взять {c ... f} (грубое предположение, основанное на времени 250 мс)
затем он передает эту коллекцию на карту.
Теперь карта преобразует каждый элемент в результат внутренней функции
Внутренняя функция - getJSON (), которая делает XHR-запрос и, возможно, повторяет попытку 3 раза в случае отрицательного результата.
Теперь два сетевых запроса вышли: сначала для abc, а затем для abcdef. Я прав?
Но у меня есть вопрос прямо здесь. Дав шесть клавиш уже. Разве он не выберет abcdef в качестве входного значения оба раза?
Так что, по моему мнению, два сетевых запроса будут сделаны с q = abcdef
2.Хорошо, двигаясь дальше, два запроса N / W возвращают результаты, он просто переключается на результат последних, независимо от успеха или неудачи.
SyntaxError, мой второй запрос N / W возвратил ошибку, пользовательский интерфейс отобразит ошибку из-за switchLatest. Я прав?
3. Скажите, у нас нет дросселя и шести клавиш {a..b..cd...ef}
Теперь карта будет иметь шесть внутренних наблюдаемых {{результат a} {наблюдаемый с результатом ab} {наблюдаемый с результатом abc} ...
{наблюдаемый с результатом abcdef}}
Теперь switchLatest
выберет последний элемент (наблюдаемый внутри) из внешнего и выведет его в виде плоской наблюдаемой величины { result of abcdef }
ИЛИ действительно ли switchLatest отменяет предыдущее событие (запрос XHR для q = abc или q = abcdef), как только abcdef дается дросселем?
Это сбивает с толку, как работают внутренние органы!