问题标签 [reactive-extensions-js]

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

javascript - Rxjs 吞下错误

有一个简单的Rxjs流,我遇到了这种情况:

随着windowWithCount + selectMany错误在内部被静默捕获并且不可捕获并且它也不会在控制台中通知

评论这两个块至少在控制台上通知错误
我不认为这是应该的,或者我错过了什么?
这里是jsbin

0 投票
1 回答
314 浏览

javascript - 使用 flatMapLatest 处理错误并重试

我有一个网页,其中有一堆用户可以点击的项目。单击任何项​​目,具体取决于它的类型,将向服务器发送一个 ajax 请求,然后显示更多项目。如果请求导致错误,我想显示它,然后允许用户像以前一样继续单击或与页面交互。

我的代码看起来像这样

我究竟在哪里可以处理错误情况?我预计会发生错误,并且我总是想重新订阅源,但我希望有机会处理该错误。

0 投票
1 回答
1126 浏览

javascript - 合并实现为 flatMap

理论上应该just()可以flatMap()通过flatMap(). 例如map()可以实现为

如何merge()通过flatMap()?(当然也避免mergeAll()

0 投票
7 回答
9797 浏览

javascript - 如何使用 RxJs 异步加载图像并在全部加载时执行一个方法

我正在尝试将基于 Promise 的代码转换为 RxJs,但很难理解 Rx,尤其是 RxJs。

我有一个带有路径的数组。

我喜欢用 Javascript 加载图像

当所有图像都加载完毕后,我喜欢执行一个方法。

我知道有

还有类似的东西

并且有类似flatMapLatest(...) AndRx.Observable.interval或基于时间的调度程序

根据我的研究,我认为这些将是解决问题的要素,但我无法让组合发挥作用。

那么如何从数组路径加载图像以及加载所有图像时我基于间隔执行一个方法?

谢谢你的帮助。

0 投票
1 回答
1366 浏览

javascript - 如何使用 Angular 处理 RxJS 中的错误

我正在开发一个 Angular 应用程序,它显示从 RESTful API 获取的项目列表。列表的内容取决于查询。可以通过填写输入字段、使用提交按钮或将其作为查询参数添加到 URL 来传递查询。

为了确保一切正常运行并防止出现异步问题,我使用了 RxJS

现在我想知道如何处理错误,因为它们可能发生在流的中间,例如。当 HTTP 请求失败时。

查询作为输入流

这是两个Observables,它们都发送一系列查询。

获取结果

Observable查询已更改并从 API 获取结果时,以下触发。

处理错误

现在我不知道如何处理错误,例如。引发getResultsForQuery错误。我想显示错误而不是结果,但阻止Observable处理新事件。

目前我已经通过从 Observable 创建两个新流来解决它,一个在成功时处理结果,一个在发生错误时处理。查询无效时的响应数据包含一个error属性。

成功流

错误流

可能的解决方案

  1. 我读过关于throwing and catch errors的文章,但这里的问题是流似乎在第一个错误之后停止并且不会触发新事件。

  2. 文档onErrorResumeNext中描述了使用以忽略错误并确保流在出现错误后继续。但我找不到正确“处理”错误并将其显示给最终用户的方法。

问题

在这种情况下如何处理错误是否有推荐的方法?是否有必要为此创建两个流,还是建议抛出异常?

重要的是用户知道出了点问题,并且流在第一个错误后不会停止。

0 投票
1 回答
302 浏览

javascript - 确保订阅者得到更新的顺序

有没有办法确保订阅者更新的顺序得到保证?

我有一个 hot observable,我的第一个订阅者做了一些同步工作来更新一个变量,然后我的下一个订阅者必须初始化一个服务(只有一次!),并且只有在确保设置了该变量之后!

它看起来像这样:

App.init看起来像这样:

这目前有效,但我不确定它是否会始终遵循 100% 的顺序。

编辑:

正如我所听说的,订阅者将被调用 FIFO。所以顺序有些保证。

0 投票
1 回答
225 浏览

javascript - RxJS bufferWithCount() not pausing for timeout

I am trying to control the inflow for a slow subscriber. Tried the below in NodeJS

When I run the above code, I would expect the slow subscriber to pause for 5 seconds everytime before next data-batch is received.

But that is not happening. After an initial 5 second delay, all data is flooded to slowSubscriber in batches of 2.

What is the right way to control the inflow so that slow subscibers can take their time (and preferably fast ones can wait for the slow ones to complete) ?

0 投票
1 回答
1618 浏览

javascript - 如何创建一个仅在有订阅者时触发的 Observable,并立即为新订阅者提供最新值

我正在尝试创建一个流/可观察的...

  1. 仅在有订阅者时输出事件
  2. 为任何新订阅者提供最新值。

具体情况是,我需要一个可观察的对象,它在发生特定事件时进行异步 API 调用,但前提是它有订阅者。我试图避免不必要的 API 调用。

我已经设法创建了一个只有当它有这样的订阅者时才会触发的流......

这有效。如果我console.log(...)在该SomeAPI.someDataGet方法中,我只会在流有订阅者时看到它触发。而且我的实现看起来非常好,因为我这样做是为了订阅和取消订阅,这非常适合 React 组件生命周期方法。

我还希望任何新订阅者在订阅时都能收到最新的价值。这就是我挣扎的地方。如果我这样做...

...直到下一个间隔我才看到console.logfor 。sub2

如果我的理解是正确的。我需要一个Hot Observable。所以我试图创建一个这样的流......

据我了解,应该制作dataStream一个hot observable.

但是,在我的测试中,第二个订阅直到下一个间隔才收到数据。此外,这将引入订阅时连接和断开数据流的要求,这是我希望尽可能避免的事情。

我是 RxJS 的新手,如果我误解了这里发生的事情,我不会感到惊讶。

0 投票
1 回答
8164 浏览

javascript - RxJS Observable:在处理最后一个订阅时执行清理?

当RxJS Observable的最后一次订阅被释放时,执行副作用的最干净的方法是什么?这可能发生在 Observable 终止之前

假设我需要一个函数返回一个Observable向资源发出更改的函数。我想在处理完所有订阅后执行清理操作。

我发现定义订阅处置操作的唯一方法是使用Rx.Observable.create. 最后的处置可以通过共享订阅来处理,例如与Observable.prototype.singleInstance().

例如:

是否有一种更简洁的方法来定义订阅处置的副作用,doOnNext类似于doOnCompleteddoOnError

0 投票
3 回答
3493 浏览

javascript - RxJS reduce doesn't continue

Why doesn't the flatMap cause downstream reductions to fire?

I got code like:

And the problem is that the 'after reduce' tap is never hit. Why?

The log is like:

Screenshot:

Error screenshot