const s1$ = of(Math.random())
const s2$ = ajax.getJSON(`https://api.github.com/users?per_page=5`)
const s3$ = from(fetch(`https://api.github.com/users?per_page=5`))
const click$ = fromEvent(document, 'click')
click$.pipe(
switchMap(() => s1$)
).subscribe(e => {
console.log(e)
})
我对上面的代码感到困惑,无法正确推理它们。在第一种情况下(s1$
),每次都收到相同的结果,尽管我不明白为什么switchMap
每次都不开始一个新的流,但对我来说看起来很好。好的,没关系
真正连线的事情发生在你跑步时s2$
,s3$
看起来相当,对吧?错误的!!!如果您尝试一下,行为会完全不同!
结果s3$
以某种方式被缓存,即如果您打开网络面板,您将看到 http 请求仅发送一次。相比之下,http请求每次发送s2$
我的问题是我不能直接使用ajax
from之类的东西,rx
因为 http 请求隐藏在第三方库中,我能想出的解决方案是使用内联流,即每次都创建新流
click$.pipe(
switchMap(() => from(fetch(`https://api.github.com/users?per_page=5`)))
).subscribe(e => {
console.log(e)
})
那么,我该如何解释这种行为以及处理这种情况的正确方法是什么?