问题标签 [rxjs-pipeable-operators]

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 回答
483 浏览

typescript - 正确保护自定义 RxJS 可管道操作符

我正在使用一个具有固定、一致的响应结构的 API:它始终是一个具有data属性的对象。由于在 RxJS 请求(或 ngrx 效果)中不断映射数据非常烦人且过于明确,因此我决定引入一个自定义 RxJS 操作符来提取数据并应用可选的回调。

但现在我的一些效果抱怨类型信息(如property x doesn't exist on type {}:),所以我想我努力正确地对操作员的 I/O 进行类型保护是不够的:

带有类型保护问题的 ngrx 效果示例:

当我明确地输入它时,这当然会消失:

我很想知道这是否是正确的 TypeScript 做事方式。

0 投票
0 回答
587 浏览

angular - 使用 Angular 和 RxJS 优化 Pubsub 模式

我正在使用 Angular 服务和 RxJS 主题实现发布和订阅模式。该服务如果使用来自后端的更新进行火化,并且必须过滤这些更新,以便任何给定的组件只能获得他们注册的更新。如果我给出我的工作示例可能会更容易。

这是服务代码:

这是组件代码:

这可行,但是当每秒接收数千个更新时,它变得低效。如何优化这种模式?有什么方法可以合并一个自定义的 rxjs 操作符来完成这项工作,或者可能是一个网络工作者?

0 投票
0 回答
452 浏览

typescript - RxJs SwitchIfEmpty 自定义 pipable 操作符

我创建了一个新的 RxJs(6) 运算符 switchIfEmpty(other),它会other在源为空时切换。

我是大理石测试的新手,我创建了一些测试来验证我的操作员,所有测试都通过了,除了一个。我不知道错误是来自操作员还是来自测试!

测试规范:

只有最后一个不起作用:

错误信息

0 投票
2 回答
622 浏览

rxjs - 只有当它返回的速度比延迟快时,我才能延迟一个可观察的

举个例子:

我希望此请求至少需要 2 秒才能完成,但不会超过完成请求所需的时间。

换句话说:

  1. 如果请求需要1s完成,我希望 observable 在2s完成。

  2. 如果请求需要3s完成,我希望 observable 在3s NOT 5s内完成。

是否有其他管道delay()可以实现我不知道的这一点,或者是否有办法为此构建自定义管道?

用例是显示一个加载器,但是如果请求完成得太快,当加载器只是“闪烁”一秒钟时,它看起来并不好

0 投票
1 回答
303 浏览

angular - 尽管在角度服务文件中使用了两种不同的方法,但同一组件中不同视图中的两个 rxjs .pipe() 方法给出了相同的结果

stackblitz.com/edit/angular-kendo-2grid 用这个检查。如果我单击下一个网格,它应该调用新的 api 并显示数据,但它也会更改以前的数据

我的单个组件中有两种不同的方法,它们使用 .pipe() 方法并在服务文件中引用两种不同的方法。这意味着他们打算给出不同的结果但给出相同的结果。

我有一个很好的视图,我在单击其中一个列表时实现了一个新视图。我得到新结果很好,但现有结果也更新为新结果。

在我的服务文件中:

最初的第一种方法有效,第二种方法也有效,但是当第二种方法有效时,它也会改变第一个视图的结果

在我的组件文件中:

两者都有效,但是当我调用 comTwo(value) 时,它也会更改 this.view 结果,我想保留 this.view 结果

0 投票
2 回答
877 浏览

angular - 如何发出 Observable 然后限制订阅

在 RxJS 中,过滤器,例如auditTimethrottleTime在经过一定时间后发出 Observable(以不同的方式)。我需要发出一个 Observable,然后在发出下一个值之前等待一段时间。

就我而言,我在 Angular 工作。例如,这段代码:

不会完成我需要的,因为发射发生在持续时间结束时。我需要相反的:发射发生,然后延迟。我怎样才能做到这一点?

0 投票
0 回答
48 浏览

rxjs - rxjs:缓存不同的http请求

此问题已移至 Code-Review:

https://codereview.stackexchange.com/questions/212854/rxjs-caching-different-http-requests


关于使用 rxjs 缓存 http-requests 已经进行了多次讨论,在这个问题/建议中,我想提出一个自定义 rxjs-operator(非纯)来提供缓存:

这个操作符不是纯粹的,因为它修改了它的一个参数(cacheStorage)。

该运算符可以这样使用:

然后客户端可以多次调用它而不会导致多余的 http 请求:

现在我的问题是: 这是解决“不同请求缓存问题”的可接受方法吗?是否可能存在内存泄漏或是否有任何泄漏的订阅?可以对提供的参数产生副作用吗?

非常欢迎对此自定义运算符的问题提出任何意见或提示!

0 投票
1 回答
45 浏览

javascript - 映射运算符返回整数作为输出,数组作为输入

这是来自文档的示例代码。我是 RXJS 的新手,所以这可能真的很容易。

谁能解释 map 运算符在对数组进行操作后如何返回一位整数?

我检查了扫描运算符的返回值是一个从[0],[0,1],[0,1,2],[0,1,2,3] ....等增加的数组。

0 投票
1 回答
194 浏览

javascript - 如果我只使用一个操作符,我应该使用管道操作符吗?

RxJs 5.5 版引入了管道操作符,以便更容易组合RxJs操作符,并在这些情况下使摇树更有效。我的问题是,如果您只打算使用一个运算符,您应该使用管道运算符吗?

考虑以下示例:

对比

在这种只使用一个运算符的情况下,最合适的方法是什么?

0 投票
2 回答
5276 浏览

angular - 如何使用 RXJS 取消内部 HTTP 可观察的待处理请求?

更改页面时取消挂起的 HTTP 请求

我们有一个 Angular 服务,它有一个昂贵的 HTTP 查询,3 个不同的消费者可以访问。每个消费者都可以随时修改此查询,发出新请求,并且所有其他消费者都必须使用新数据进行更新。

因为 HTTP 订阅在完成后立即关闭,所以我们使用带有行为主体的内部可观察模式来保持消费者的连接(见下文)。

那么问题在于,当用户更改页面时,当前未决的 HTTP 响应无法取消。

通常我认为在后台丢弃 HTTP 请求不会有太大的问题......但除了它是一项昂贵的操作之外,我发现在用户返回后是否确实解决了待处理的响应到页面,它将使用旧查询的数据更新消费者。

没有布埃诺。

服务电话

我试图在每个消费者在 ngDestroy() 期间调用的服务中创建一个拆卸方法,但除非我完成了流,否则它不起作用。但是那时,当用户返回页面时,我无法再次重新启动流。

我绝不是 RXJS 专家,所以请随时指出我的整体设计是否错误。我怀疑我应该使用switchMap()share来防止两个消费者发出相同的请求;但由于这种可观察到的模式是半热的,我不确定正确的做法是什么。更不用说取消它了。

任何和所有的帮助将不胜感激。