问题标签 [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 回答
64 浏览

angular - (Angular 2/4/5/6) 两个(或多个)内部订阅方法和一个外部订阅方法

我试图弄清楚如何使用外部订阅方法调用 2 个内部订阅方法。我总共想做 3 次 api 调用,但是,2 次 api 调用取决于 1 次 api 调用的结果。

因此,在我从第一个 api 调用中获得 this.retrieveDeviceid 之后,我想再进行 2 个 api 调用,其中一个在 faultService 上(如图所示),第二个在 deviceService

目前显示的代码仅处理 1 个内部订阅和 1 个外部订阅。为了进行另一个内部订阅,我必须使用 mergeMap 或 forkJoin 吗?我该如何去做?感谢您的指导!!

0 投票
2 回答
120 浏览

rxjs - switchMap 奇怪的行为

我试图理解以下代码的控制台输出。我期待它会每 500 毫秒控制台记录 0 到 9,然后再次以 0 重新开始(最终以 9 结束)。

但事实是它第一次只会控制台记录 0-9,然后输出变为 0-8,在 8 处暂停 1 秒,然后再次从 0 开始。

我的问题是

  1. 为什么9只出现一次?
  2. 为什么在 8 处有 1 秒(而不是 500 毫秒)的暂停?

由于源 observable 每 5 秒发射一次,而内部 observable 每 500ms 发射一次,它应该有足够的时间让内部 observable 发射 0 到 9,并且它不应该在 8 处暂停。

这是 stackblitz 上的相同代码: https ://stackblitz.com/edit/typescript-eb62ap?file=index.ts&devtoolsheight=100

0 投票
1 回答
214 浏览

rxjs - rxjs switchMap 缓存过时的结果并且不创建新流

我对上面的代码感到困惑,无法正确推理它们。在第一种情况下(s1$),每次都收到相同的结果,尽管我不明白为什么switchMap每次都不开始一个新的流,但对我来说看起来很好。好的,没关系

真正连线的事情发生在你跑步时s2$s3$看起来相当,对吧?错误的!!!如果您尝试一下,行为会完全不同!

结果s3$以某种方式被缓存,即如果您打开网络面板,您将看到 http 请求仅发送一次。相比之下,http请求每次发送s2$

我的问题是我不能直接使用ajaxfrom之类的东西,rx因为 http 请求隐藏在第三方库中,我能想出的解决方案是使用内联流,即每次都创建新流

那么,我该如何解释这种行为以及处理这种情况的正确方法是什么?

0 投票
2 回答
1925 浏览

angular - 角度异步重新加载微调器

当异步管道为空时,我有一个简单的设置来显示加载微调器:

但是,当用户再次搜索第二次时,加载.. 没有显示,我想我需要这个 searchResults$ observable 发出 null 以再次显示微调器,或者有一个单独的 isLoading 变量。

最好的方法是什么?

如果重要的话,我有一个 debounce 和一个 switchMap(即使用 finalize 等很棘手)

另外,我尝试过*ngIf="!isLoading && (searchResults$ | async) as searchResults但发现它有问题,例如 searchResults$ 未订阅,或者在更改检测后有角度抱怨更改

0 投票
1 回答
453 浏览

angular - switchMap angular observable 后发出的问题

问题是:当 this.getPost())) 返回错误时,例如 404(它是返回 GET 的函数),然后代码this.loggedChange.emit(false)没有执行,我不知道为什么。在这种情况下,我的loggedChangedHandler 输出错误。看起来像内部错误,在 swtichMap 之后,this.loggedChange 没有“观察到”。在 switchMap 之前它已经观察到,所以我认为它可能是线索,但我不知道为什么它会这样工作。如果第一个函数返回错误(this.authLogin - 它也返回 get),那么 this.loggedChange.emit 工作正常。

子组件:

在父组件中我有这样的东西:

并在 ts

0 投票
2 回答
2767 浏览

angular - 等待多个可观察对象(并行)以 Angular 效果完成

我正在编写一个效果,该效果需要几个单独的服务调用的结果(作为可观察对象返回),然后才能完成它。第一个服务调用必须在另外 3 个(可以是异步的)之前完成,然后我构建我的操作列表。我让它工作,但感觉它是不必要的嵌套。

基本上,在我的示例代码中,一旦我调用并从dataService.openMyData调用中返回,我想并行执行这些调用:

  • dataService.getShapes
  • dataService.getCircles
  • dataService.getTriangles

一旦它们全部完成,我想在我的动作数组中使用它们返回的数据return [new etc...]来完成效果。

希望有人有一种比这种丑陋(和不必要的)缩进地狱更优雅的方式来处理 3 个中介服务调用......

我环顾四周,发现有些人正在使用 forkJoin 来等待多个 observable 的结果,但似乎他们不能使用该 forkJoin observable 的结果作为操作的返回值。例如,下面的这段代码告诉我,我最终没有创建一个 observable,这是我的效果所需要的。

0 投票
1 回答
34 浏览

angular - 异步 API 调用问题:迭代第一个响应并传递值以在 Angular 6 中进行另一个 API 调用

我是 java 开发人员,尝试使用需要同步调用的异步 API 调用。我需要进行第一个 API 调用 >> 将响应迭代为数组 >> 进行另一个 API 调用 >> 返回最后一个 API 调用的响应并订阅它

以前,我使用 switchmap 实现了多个 API 调用,但不知道如何在迭代中使用 switchmap 或其他任何东西。

这是我的代码

及其他功能

0 投票
2 回答
1484 浏览

angular - 问题是:“可观察”类型上不存在属性“switchMap”

尝试在 git bash 中运行时遇到此问题。.switchMap 未执行并显示错误为“错误 TS2339:属性 'switchMap' 在类型 'Observable' 上不存在”

我正在使用的代码是:

我的 rxjs 版本是 rxjs@6.3.3 最新版本,nodejs 版本是 v8.12.0 请帮助我建立一个聊天网站。

0 投票
1 回答
474 浏览

angular - RxJS 6 - Angular 7 - 正确取消来自主题的当前 http 请求

嗨,我的主题订阅和搜索电话有问题。我想取消上一个通话以支持当前通话。我已经搜索了以前的线程,但没有成功找到答案。

我知道我应该使用 switchMap() 但我没有成功。无论状态如何,它都会继续所有呼叫。我认为这可能与我设置的方式有关,因为我没有返回我设置的响应。所以没有单一的可观察参考..?

感谢所有帮助!

请看下面的代码:

运行搜索:

快速搜索服务:

谢谢

更新

我仍然没有找到这个问题的答案。因此,我将尝试改写它。

我对此有 5 个部分:

当输入框更改时,调用运行搜索,其中也订阅了搜索服务这不会返回

0 投票
2 回答
1123 浏览

javascript - 理解 rxjs 中的 SwitchMap

根据switchMap的定义

在每次发射时,先前的内部 observable(您提供的函数的结果)被取消并订阅新的 observable。您可以通过短语 switch to a new observable 记住这一点。

现在,我有这样的代码

结果是这样的

在此处输入图像描述

我的问题是,

  1. 第 25 秒 - 外部函数被调用,内部函数尚未触发,所以外部函数的最新值为 0,内部函数也默认为 0,因为它还没有值f0-s0 25

  2. 第 26 秒 - 调用内部函数,理想情况下该值应为 0,因为该函数只是第一次调用,但它是 1,即。f0-s1 26

  3. 第 30 秒 - 调用外部函数,将内部函数值重置为 0,即。f1-s0 30

  4. 为什么内部函数在第 35 秒重置,还剩 1 秒

堆栈闪电链接

我发现很难理解这个概念,谢谢