Lex Asked:2020-01-20 02:50:55 +0000 UTC2020-01-20 02:50:55 +0000 UTC 2020-01-20 02:50:55 +0000 UTC 在引擎盖下切换地图 772 Switch Map 在技术上是如何工作的?为了取消已经从服务器发送到客户端的请求,究竟会发生什么? rxjs 1 个回答 Voted Best Answer overthesanity 2020-01-20T03:05:36Z2020-01-20T03:05:36Z switchMap与查询无关。 确实如此HttpClient。创建线程时,您可以返回取消订阅时将调用的函数,这样做是为了方便并避免内存泄漏。 new Observable((observer) => { function listener(event: MouseEvent) { observer.next(event); } window.addEventListener('mousemove', listener); return () => window.removeEventListener('mousemove', listener); }); HttpClient使用XMLHttpRequestwhich 有一个方法abort,如果您在答案到达之前取消订阅,它会中断请求。 new Observable((observer) => { const xhr = new XMLHttpRequest(); xhr.open('GET', '/api/delay', true); xhr.onload = () => observer.next(xhr.responseText); xhr.send(); return () => xhr.abort(); }); 如果您订阅并立即取消订阅,请求将被取消。 switchMap收听 2 个流 - 源 ( source) 和投影 ( project)。生成事件时,源switchMap订阅投影并等待已从投影生成事件。如果来自源的下一个事件比来自投影的事件更早到达,它将switchMap取消订阅投影并创建一个新订阅。
switchMap与查询无关。确实如此
HttpClient。创建线程时,您可以返回取消订阅时将调用的函数,这样做是为了方便并避免内存泄漏。HttpClient使用XMLHttpRequestwhich 有一个方法abort,如果您在答案到达之前取消订阅,它会中断请求。如果您订阅并立即取消订阅,请求将被取消。
switchMap收听 2 个流 - 源 (source) 和投影 (project)。生成事件时,源switchMap订阅投影并等待已从投影生成事件。如果来自源的下一个事件比来自投影的事件更早到达,它将switchMap取消订阅投影并创建一个新订阅。