javascript - RxJS 如何将一个流映射到另一个不同流的最新一个?

标签 javascript stream rxjs cyclejs

我目前正在使用 Cycle.js,并尝试在提交表单时获取文本输入流。例如:

const textChange$ = DOMSource.select('input').events('change');
const textValueSubmit$ = DOMSource.select('form').events('submit')
    .do(ev => ev.preventDefault());

我认为此时我需要合并流,但我只关心最新的文本值(当用户提交表单时)。处理这种情况的适当方法是什么?

最佳答案

除了当前答案之外,您还可以使用 withLatestFrom。请注意,combineLatestwithLatestFrom 语义在细微之处有所不同:

  • 只要组合源之一发出一个值,combineLatest 就会发出一个值(只要每个源可观察序列至少发出一个元素)
  • withLatestFrom 仅当组合源发出值时才会发出值

所以你可以这样做:

const textChange$ = DOMSource.select('input').events('change')
  .pluck('target', 'value')
const submit$ = DOMSource.select('form').event('submit')
  .do(ev => ev.preventDefault)
const textValueSubmit$ = submit$.withLatestFrom(textChange$, function (submit, textChange){...});

即使这没有涵盖您的特定用例(这里您不关心提交事件传递的值,因此建议的sample也可以正常工作),它是对于 future 另一个类似的用例,记住这两个运算符仍然是件好事。

最后一件事,在这种情况下,combineLatest 真的适合您吗?似乎每次 textChange$ 触发时都会产生 textValueSubmit$ 发射。这是预期的行为吗?

关于javascript - RxJS 如何将一个流映射到另一个不同流的最新一个?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36270343/

相关文章:

IOS录制音频并实时分割成文件

typescript - Observable<{}> 不可分配给类型 Observable<SomeType[]>

javascript - 动漫 : translateX 0 value doesn't work

javascript - HTML Canvas : Delay Animation

ios - 通过 MPMoviePlayer 流式传输带有凭据的大型电影

javascript - typescript 模块在同一文件中以不同方式解析 'rxjs'

rxjs - 无法从 'rxjs/testing' 找到模块 'jasmine-marbles.umd.js'

javascript - 前端和管理区域的 Angular 项目布局?

php - 如何为 .click 事件赋值

json - 使用 JQ 从一组字符串中获取唯一字符串