switchMap 和 mergeMap

发布于 2022-09-04 11:35:16 字数 244 浏览 16 评论 0

switchMap 与 mergeMap 都是将分支流疏通到主干上,而不同的地方在于 switchMap 只会保留最后的流,而取消抛弃之前的流

但是结合下面这个搜索实例,他们之间有什么区别呢?我换用好像效果一样,mergeMap也没重复结果

http://jsbin.com/suguho/edit?...

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

┊风居住的梦幻卍 2022-09-11 11:35:16

提干中的例子:

  1. Promise 不支持 cancellation 机制

  2. wikipedia 的 API 可能有问题

下面的例子:

  1. 把 Promise 替换成内置的 Observable.ajax ,底层使用 XHR ,支持 cancellation

  2. API 替换成 http://jsonplaceholder.typico...

  3. 取消了干扰项,throttleTime

http://jsbin.com/suguho/8/edi...

疏忽 2022-09-11 11:35:16

LZ说的是正确的,switchMap会把之前的多个分支给取消掉,只保留最后一个;而mergeMap不会。
另外LZ的这个例子好像有点儿问题,我修改了一下,执行之后能够得到预期的结果。

clipboard.png

const Observable = Rx.Observable

const input = document.querySelector('input')

const search$ = Observable.fromEvent(input, 'input')
  .map(e => e.target.value)
  .filter(value => value.length >= 1)
  .distinctUntilChanged()
  .switchMap(() => wikiIt())
  .subscribe(
    x => renderSearchResult(x),
    err => console.error(err)
  )


function renderSearchResult (result) {
  //console.log(result);
  document.querySelector('#result').innerHTML = result.response.username
}

function wikiIt () {
  return Observable.ajax('https://jsonplaceholder.typicode.com/users/1');
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文