问题标签 [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.

0 投票
1 回答
81 浏览

angular - 如果外部 observable 返回错误,则强制调用 switchMap 的内部 observable

我的代码:

可能存在无法检索位置的情况(谷歌浏览器中没有 https,或者用户不允许)。

在这种情况下,我仍然需要返回return this.get('/places', { point: this.userService.coords });

就在这个电话中,this.userService.coord将是null

服务代码:

目前 - 如果外部 observable 返回错误,则内部 observable 不会被调用(返回)。

0 投票
1 回答
56 浏览

angular - 第二个订阅不会从 RXJS 中的第一个订阅的 switchMap 开始

我有这个工作代码。它从路由器获取 ID 并将其作为参数应用,以加载组件的数据。

然后,我尝试使用更好的方法,并希望在第一个订阅完成时调用第二个订阅。根据此答案中的第二个示例,我应该分享第一个结果,然后切换 map 以取消订阅并继续下一个。所以我实现了以下。

遗憾的是,这不会调用服务器,也不会将数据传递给客户端。在尝试了几次更改后,由于缺乏想法,我放弃了。

这两种方法之间的显着区别是什么?我在哪里对第二个样本的解释感到困惑?

0 投票
1 回答
547 浏览

angular - NgRx 和 RxJS:依赖状态选择器

我有一个组件订阅构造函数中的多个状态片。

第一个订阅订阅对象数组,而第二个订阅调用另一个组件 (@ViewChild(PComponent) PGrid) 中的方法。组件中的LoadData()方法PGrid依赖于 this.Data 来自第一个订阅。

当我运行代码时,我对此没有定义。数据虽然selectedProcess.Data有价值

这意味着当状态的第二部分被订阅并且LoadData()方法被调用时,它会因为this.Data未定义而出错。

我相信这是由于 Observable 的工作方式以及由于它们是异步的,因此一个函数可能不会在另一个函数之前返回值。

问题:1 为什么this.Data= selectedProcess.Data;设置this.Data为 undefined 即使 selectedProcess.Data有值

问题 2:我看过,flatMapswitchMap由于我是 RxJS 和 NgRx 的新手,我对如何利用它们感到困惑。有小费吗?

PS 在类似的说明中,我在我的 中分别订阅了 2 个切片ngOnInit(),这是首选方式还是应该将它们结合起来?

0 投票
0 回答
19 浏览

angular - ngrx/效果的 Angular 6 jasmine 测试用例

我正在尝试为效果编写测试用例。任何人都可以帮助我如何测试其中的 switchMap 功能。提前致谢。这是我的功能

还有我的规格文件

0 投票
1 回答
199 浏览

angular - switchMapTo 后 switchMapTo 的使用

预期行为:

1) 获取所有任务taskService.getAllTasks()

2)将结果任务传递给filterService.addFilterableTasks()

3) 获取任务filterService.getFilteredTasks()

4)将结果任务传递给searchService.addTasks()

5) 获取任务searchService.getBoardFilteredTasks()

当前行为:

没有第 (3) 行:

第 1 行 => 控制台中的预期数组

第 2 行 => 正确的已通过任务数

使用第 (3) 行:

第 1 行和其他所有内容都不会被触发。一个错误说没有任务searchService.getBoardFilteredTasks

问题:

是否允许一个switchMapTo()接一个地使用?

还是有另一种实现方式?

0 投票
3 回答
251 浏览

angular - 已解决 - 当一个接一个地运行 2 个 observable 时 - 根据第一个得到结果

我有 2 个返回 Observables 的函数,我想一个接一个地执行。 函数1返回

function2返回类型

我希望执行它们的函数根据 function1 的结果返回布尔 我在运行第一个function1时设法这样做了,但现在我想先运行function2,我得到了错误:

查看我的代码:这有效

失败了

解决方案:

0 投票
1 回答
353 浏览

arrays - 在 RXJS 中传递给 switchMap() 时对象数组的奇怪行为

我有一个简单的目标,即创建一个可观察到的可发出世界上所有国家/地区列表的对象。observable 的类型是Country[],即存储值被键入为对象数组。但是,当传递给 时switchMap,它会神奇地转换为 type Country。我不知道是什么导致了这种行为,如果不是,碰巧在我这边。这是有问题的功能:

如果您有问题:

  • FilteredArrayResponse是一个通用接口,其data属性实际上包含数组
  • 完整的错误信息是Type 'Observable<Country | Country[]>' is not assignable to type 'Observable<Country[]>'.
  • 我的猜测是,它以某种方式switchMap将 Observable 的数组与 Observable 的数组混淆了......
  • 的返回类型result.data始终是数组
  • 家庭中的其他操作员map表现出相同的行为
0 投票
1 回答
126 浏览

angular - Angular Service 未执行 switchmap

我有一个不会进入的开关图。我今天早些时候让它工作了,但由于某种原因,现在它没有输出alert("INSIDE SWITCHMAP")或 switchmap 中的 console.logs。

还有这个小块的警报

输出正确的值,因此它们都不为空。

有什么建议么?感谢您的帮助!

确认投标组件

api调用

0 投票
2 回答
1948 浏览

angular - 如何完成 rxjs switchmap observable?

我在我的 Angular 8 项目中有一个 observable,并订阅了 ngOnInit()。

但是 complate 方法不会触发订阅。

我订阅的chartData类型是BehaviourSubject. 所以我不订阅urlSubject。因为 url 可能随时更改搜索或过滤参数。

我正在使用finilize,但它不起作用。我认为这个问题与 switchmap 内部孔隙有关。如何完成并将加载设置为 false?

0 投票
1 回答
51 浏览

javascript - 使用 rxjs 6 如何创建带有缓存的可取消 Web 请求管道,并限制同时发生的请求数量

我希望有人能够指出我正确的方向,因为我正在努力结合并发和取消rxjs 中排队请求的能力。我将尝试在连续事件中解释这一点。假设我们有 observable A,它接收一个字符串数组。

事件:A 观察到:['dog', 'cat', 'elephant', 'tiger'] 下游检查字符串网络响应是否被缓存,如果它存在于缓存中则从缓存中获取它,如果没有则从缓存中请求它web 并使用 publishReplay / shareReplay 将 observable 保存到缓存中。一次发生 2 个网络请求的限制,因此它尝试从 api 获取“狗”和“猫”(此操作需要 2000 毫秒以上)。1000 毫秒后,A 观察到另一组值:['dog', 'rat', 'horse', 'rabbit']。

接下来应该发生以下情况。我不希望取消“狗”和“猫”请求,我希望他们完成他们的请求,但我想忽略第一个请求中的“大象”和“老虎”。一旦 'dog' 和 'cat' 从第二帧得到他们的响应'rat' 和 'horse' 应该从网络请求,最后一旦其中任何一个解析 'rabbit' 被请求。

这是我当前的代码。我尝试在 networkObservable 的 defer 和 from 之间切换,但行为不同,这也不是我想要的。

这导致输出:

这接近想要的行为,但有一个明显的缺陷。Rat and horse 被请求并且不等待 dog 和 cat 在被处决之前解决。但是,“老虎”和“大象”已被妥善处理,因此功能正常。

我是否必须创建一个单独的主题来处理请求?