我在一个页面上有 3 个按钮,每个按钮都发出单独的异步请求。此页面的内容应显示最后一次单击按钮生成的请求返回的文本。
如果我合并这些流,页面的内容始终是上次完成的异步请求的文本,而不是上次点击的文本。
这是一个例子。 (S*) 是流,(C) 他们的点击,(R) 他们的响应。我的代码将导致 S3 单击呈现在页面上。但是,我希望渲染 S2 的内容,因为这是最后的单击。
S1 --c-r-------------
S2 --------c---r-----
S3 ------c----------r
最佳答案
使用switchAll 。像这样的东西:
const s1 = clickStream1.map(() => someAsync1())
const s2 = clickStream2.map(() => someAsync2())
const s3 = clickStream3.map(() => someAsync3())
const stream = merge(s1, s3, s3).pipe(
switchAll()
)
每次发生新的点击(并且开始新的异步操作)时,流将“忘记”任何先前的正在进行的操作并开始监听新操作。
关于rxjs - 返回最近事件的响应,而不是最后一个异步响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57926336/