在搜索框中了解Rxjs的Throttle | Map | SwitchLatest流程

时间:2019-05-03 06:19:37

标签: rxjs asynchronous-javascript

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. 每一步的搜索结果如何?

比方说,我按abcdef,节流阀将执行的操作是拾取{c ... f}(基于250ms时序的粗略假设) 然后将这个集合传给地图。 现在map会将每个项目转换为内部函数的结果 内部函数是getJSON(),它会发出XHR请求,并在结果为否的情况下重试3次 现在,两个网络请求都消失了,第一个是abc,第二个是abcdef。我对吗?

  • 但是我在这里有疑问。已经给出了六个keyPress。会不会两次都选择abcdef作为输入值?

  • 因此,根据我的说法,将使用q = abcdef发出两个网络请求

2。好吧,继续,两个N / W请求返回结果,无论成功与否,它都将立即切换到最新的结果     SyntaxError,我的第二个N / W请求返回了错误,由于switchLatest,UI将显示错误。我对吗?

3。说,我们没有油门和六个按键{a..b..cd...ef} 现在,地图将具有六个内部可观测值{{a的结果{{a的结果可观测}} {ab的结果可观测} ... {可观察到abcdef的结果}}

现在,switchLatest将从外部物品中选择最后一个(内部物品)并将其输出为{ result of abcdef }的平面物品

,一旦节流阀给出了abcdef,switchLatest是否会取消上一个事件(对q = abc或q = abcdef的XHR请求)?

令人困惑的内部工作原理!

0 个答案:

没有答案