问题标签 [switchmap]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
angular - Angular 在 HTTP 调用之前异步获取授权令牌
在发布此之前,我去了许多其他类似的问题,但无法找到解决方案。像 Angular 2 - 在每个 Http 请求之前注入授权令牌
我正在使用 AWS 会话,它为我提供了发出 HTTP 请求的授权令牌。现在获取会话可以是异步操作,具体取决于刷新令牌的需要。
问题: 我无法链接获取会话然后进行 HTTP 调用。
版本Angular 5、RxJs 5.5.2
AuthService 的获取会话功能。
API 服务的 get 函数 - Trail 1
API 服务的 get 函数 - Trail 2
这里我如何调用这个 api。
现在的问题是在这两种情况下控制台都只是打印。而不是进行 http 调用。
我不明白我在使用 switchmap 的 mergemap 以完成 http 请求时出错的地方。
angular - 两个独立的后续查询需要来自 ActiveRoute 的结果
当我需要在 Observable 上使用 switchMap 两次(独立查询)时,最佳实践是什么。我需要从 activeRoute.ParamMap... 返回的 Id 用于两个独立的查询。对于只有一个查询,我会执行以下操作:
现在我需要从路由返回的 Id 进行另一个查询
所以我需要从 paramMap 中提取的 Id 作为服务和 anotherService 的输入。
最佳做法是什么?把它们锁起来?来自 Service 和 AnotherService 的 Observables 的时间是无关紧要的。
由于这是我在这里的第一个问题,请让我知道在下一个问题中我可以做得更好。
谢谢你,史蒂芬
angular - RXJS - SwitchMap 或 SwitchMapTo 用于重置计时器
所以我是 RXJS 的新手。我想要做的是设置一个会话到期计时器,当用户收到他们的会话即将到期的模式提示时,如果他们单击继续,计时器将被重置。
我一直在阅读 switchMap 和 switchMapTo,但我发现的示例使用了某种点击事件或鼠标移动事件。我的情况是,我不想在单击按钮时刷新,因为我正在验证 JWT。成功验证 JWT 后,我将刷新计时器。
我有一个供用户使用的通用库,可以像这样设置计时器:
在我的代码的其他地方,我订阅了 tokenExpirationTime(这是我知道计时器上的当前时间的方式,所以我知道何时显示我的弹出窗口)。
前任。
我可能做错了这一切,因为我是新手。我希望我的解释很清楚,但如果没有,请告诉我。感谢您的帮助!
angular - 可取消的请求链
所以,我试图绕开我的脑袋rxjs/observable
,在我的测试案例研究中,我试图构建一个简单的基于 angular(5) 的 web 应用程序,它应该显示一些关于地理实体的统计信息,即国家、州、城市。所以我创建changeView
了一个接受三个参数(两个可选)和各自 id 的方法。
一开始我希望应用程序首先检查我的模型是否已经加载了国家数据,如果没有则查询数据,将检索到的数据保存在模型中,然后检查是否stateId
已指定并包含在country.states
数组中检查是否已经加载,如果不查询状态等等,直到检索到所有数据,或者用户更改了输入参数,在这种情况下,所有正在进行的请求都应该停止(据我了解,这部分已完成经过switchMap
操作员),新一轮的请求应该开始。几天后我明白这太复杂了,所以我改变了计划,决定只在最后才将数据存储到模型中。它看起来像我想要的那样,但子顺序请求并没有被取消。以下是我目前所拥有的摘录:
我已经看到,一旦第二个请求被触发,它就不会被取消,并且数据将进入订阅......在我看来我过于复杂了,它可以更优雅地完成方式,这也将按我的预期工作,是这样吗?附加问题:我可以,或更准确的问题 - 我应该从流程中提取数据,还是仅在订阅方法中提取数据?
rxjs - RxJS switchMap 不会取消内部合并的 observable
内部合并的 observable 不会以此代码终止(rxjs 5.5.6):
输出是:
预期的输出是:
也就是说,在第二个向量发出后,switchMap 应该取消订阅第一个向量上的可观察对象,取消该可观察对象。虽然 unsubscribe 显然在工作,但内部 observable 仍在运行,作为第一个示例输出中的“do: a0 .. b0 .. c0”的证据。
事实上,预期的输出正是您从这段代码中得到的:
但是为什么第一个示例的行为方式不同呢?
promise - 为什么 switchMap 运算符在与 Promise 一起使用时只发出最后一个值?
我很难理解这一点。当我将 switchMap 运算符与 Observable 一起使用时,它会按预期发出所有值:
结果:
但是当我用 Promise 替换 Observable 时,我得到了不同的行为:
结果:
angular - 带有角度 HttpClient 的 RxJs switchMap
每当触发新请求时,我都有一个用例,任何已经在运行的 http 请求都应该被取消/忽略。
例如:
- 一个请求(比如 #2)进来,而请求 #1 响应时间太长/网络连接速度慢。
- 在这种情况下,#2 会从服务器获得非常快速的响应,然后在任何时候,即使 #1 带着响应返回,HTTP 响应 observable 也应该被忽略。
- 我面临的问题是,首先组件显示来自请求 #2 的响应值,并在请求 #1 完成时再次更新(这不应该发生)。
我认为 switchMap 取消了 obervables / 维护了 observable 值的发出顺序。
摘自我的 service.ts
上述实现不起作用。有人能找出这个用例的正确实现吗?
angular - 如何使用 switchMap 取消挂起的 http 请求并只接受最后一次订阅?
我尝试使用 subscription.unsubsribe 取消挂起的 http 请求,如下所示:
我想知道如何将 switchMap 应用于此代码以终止对 URL 的待处理请求(例如,当第一次搜索花费很长时间并且输入第二个搜索时自动完成搜索输入,我想关闭第一个。)谢谢
observable - '(num: number) => void' 类型的参数不能分配给 '(value: number, index: number) => ObservableInput<{}>' 类型的参数
我对 rxjs 函数有一些疑问。实际上,我向 http 服务器发出请求。我从 http 服务器接收数据的方式是两个步骤,因为每个请求只返回 10 个项目,而不是整个项目。每个请求都有页码,所以如果我总共有 100 个项目,我必须进行 10 次请求。因此,在逐个发出请求之前,我先提取总页数,然后循环请求与页数一样多的请求。为了做到这一点,我使用如下 switchMap 函数。
它返回错误错误 TS2345:'(page_num: number) => void' 类型的参数不可分配给'(value: number, index: number) => ObservableInput<{}>' 类型的参数。类型 'void' 不可分配给类型 'ObservableInput<{}>'。
所以,我搜索了一些关于这个问题的信息,我发现了一些东西,
但我不明白什么问题和答案说得好。这意味着我应该把 Observable.empty() 让它工作?此外,我什至尝试返回 Observable.of(null) 和 Observable.empty(),它说即使我导入了该函数,类型“typeof Observable”上也不存在属性“empty”。
javascript - 如何取消 RxJS 中的 switchmap 链?
以下使用switchMap
...
...产生以下输出:
我希望得到以下输出:
我预计第一个switchMap
会在每次返回时取消下游的所有内容,我猜这是不正确的。
有没有办法实现所需的行为?