问题标签 [rxjs5]

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

javascript - 如何使用 RXJS 动态链接函数调用?

我需要在第一次调用时缓存请求的结果,然后为后续调用读取缓存值。

为了实现这个目标,我正在使用 Promise 并将它们链接起来。我有一个可行的解决方案,但我想将其转换为 RxJS 的 observables 而不是 Promises。

这是我的工作解决方案:

你可以在这个 plunkr 上测试它:https ://plnkr.co/edit/j1pm2GeQf6oZwRvbUsXJ?p=preview

如何使用 RxJS 5 beta 实现相同的目标?

更新

根据 Bergi 的评论,我更新了我的 plunkr 和我的代码,使其更接近我的真实案例

0 投票
2 回答
227 浏览

typescript - 如何使用 RxJS Observable 方式选择 DIV?

我正在使用 Angular 2。

现在我知道这种选择 DIV 项目的方法:

是否有 RxJS Observable 方法来选择该项目,然后执行类似的操作item.style.top = '10px';?谢谢

0 投票
1 回答
814 浏览

javascript - 如何通过重新连接实现 shareReplay?

在下面的代码中,我创建了一个简单的 observable,它产生一个值然后完成。然后我分享那个可观察的重播最后一个项目并订阅 3 次。第一次紧随其后,第二次在产生值之前,第三次在产生值并且可观察对象完成之后。

您可以在 jsbin 上执行此操作

这导致以下大理石图

但我希望

我可以理解为什么有人想要第一个行为,但我的理由是,与这个例子不同,我返回一个数字,我可能会返回一个易受取消订阅行为影响的对象,例如数据库连接。如果上面的大理石图表示一个数据库连接,在我调用的 dispose 方法中db.close(),在第三个订阅上我会遇到一个异常,因为我收到一个已发布的数据库处理程序作为值。(因为当第二次订阅完成时 refCount = 0 并且源被释放)。

这个例子还有另一个奇怪的事情是,即使它使用第一个值解析并在之后完成,它订阅源两次(正如你可以从重复的“创建可观察”中看到的那样)

我知道这个 github 问题谈到了这一点,但我缺少的是:

如何实现(在 RxJs4 和 5 中)一个共享的 observable,如果源 observable 尚未完成,则可以重播最后一项,并且如果它已完成(refCount = 0),则重新创建 observable。

在 RxJs5 中,我认为 share 方法解决了我的问题的重新连接部分,但不是共享部分。

在 RxJs4 我一无所知

如果可能的话,我想使用现有的运算符或主题来解决这个问题。我的直觉告诉我,我必须用这种逻辑创建一个不同的主题,但我还没有完全做到。

0 投票
1 回答
742 浏览

angular - angular2查看可观察的异步管道不渲染

我正在使用@ngrx/store并且我正在从商店中获取一部分状态。

我有一个想要显示该切片的组件。但是,{{ obs$ | async}}在模板中存在的情况下,不会渲染整个模板。如果我删除{{ obs$ | async }}然后SLICE:呈现。

关于为什么会这样或如何诊断问题的任何想法?JS 控制台没有显示任何错误。

0 投票
3 回答
16228 浏览

angular - 使用 RxJs 和 Angular 2 来处理服务器发送的事件

我正在尝试在 Angular 2 /RxJs 应用程序中显示服务器发送的事件发出的值。

后端通过服务器发送的事件定期向客户端发送单个字符串。

我不确定如何处理 angular 2/RxJs 端的检索值。

这是我的客户(一个 ng 组件):

后端方法如下(并使用 RxJava):

我只是注意到该应用程序挂在请求上,并且页面上没有显示任何内容。

我怀疑我使用 map 方法存在问题,即.map(this.extractData)

我只想将传入的字符串添加到数组中,并在模板中显示该数组,该数组会随着字符串的进入而更新。

有人可以帮忙吗?

编辑:这是一个可行的解决方案(感谢蒂埃里在下面的回答):

0 投票
2 回答
14003 浏览

typescript - 从(服务器发送的)EventSource 创建一个 RxJS Observable

我想从 EventSource(服务器发送的事件)创建一个 RxJs Observable。

我尝试了以下方法:

但我得到以下异常:

为了完整起见,这里是我的 index.html 的内容:

有人可以帮忙吗?

编辑1:按照Yurzui的建议,我修改了我的代码如下:

它确实在控制台中记录第一条消息,如下所示:

现在,如果不是x在控制台中记录变量,我只需将其传递给下一个方法,如下所示:

服务器发送的事件由客户端检索(我在 chrome 开发工具中看到它们)但模板中没有显示任何内容,表明未填充字符串数组...

顺便说一句,我不得不删除它,JSON.parse(x.data)因为它会导致错误。

0 投票
1 回答
870 浏览

typescript - rxjs5 - 找不到 WebSocket 构造函数

我正在尝试做一些基本的事情,但这完全让我望而却步。我正在尝试在RxJS5Observable中创建一个from ,但我没有使用 typescript 或 es6 模块……只是简单的 'ole good commonJS. 我已经设法根据文档正确地修补了 Observable,但是每当我尝试传入该主题的预期字符串时,我都会收到错误消息:rxjx/observable/dom/webSocket

no WebSocket constructor can be found[来源]

我还没有时间深入研究TypeScript,但据我所知,我已经满足了构造函数的条件,并且我还看了一下测试规范,它们都使用了相同的函数 Observable.webSocket('ws://host:port');我正在尝试的方式,但我仍然得到一个错误。

我试过了:

我也尝试将对象传递给Rx.Observable.webSocket

从 commonJS 消费时,谁能帮我弄清楚如何使用可通过 rxjs5 获得webSocket的Observable ?(节点 v5.11)

0 投票
1 回答
3606 浏览

angular - 将纯字符串 [] 转换为 Observable并将其连接到另一个 Observable使用 RxJS 5

我正在尝试将平原string[]转换为 aObservable<string[]>并将其连接到现有的Observable<string[]>.

然后我将使用 angular2async管道来显示Observable.

这是我的代码:

有人可以帮忙吗?

此外,我想确保在Observable<string[]>重复调用 EventSource 时不断更新服务实例。我的订阅逻辑是否在正确的位置?

编辑 1:我尝试使用 RxJSconcat运算符,如下所示:

与 angular2async管道一起:

页面上什么也没有显示;字符串只是显示在控制台上...

我做错了什么?

编辑 2:该应用程序可在 github 上找到

编辑 3:我考虑了 Thierry 的建议,特别是使用async管道来订阅以及使用扫描运算符。

现在唯一剩下的问题是我需要单击路由器链接才能在模板上呈现字符串...模板不会自动更新...

请参阅 github 上的项目和相关标签:https ://github.com/balteo/demo-angular2-rxjs/tree/36864628/536299

0 投票
1 回答
1091 浏览

npm - 用于 RxJS 5 的 @reactivex/rxjs 和 rxjs NPM 包

@reactivex/rxjspackage中,建议使用 scoped package:

npm install @reactivex/rxjs

并且 UMD 模块可通过 npmcdn 作为

然而,无范围的rxjs也发布了 5.x 版本,但 README 也建议

npm install @reactivex/rxjs

UMD 模块可用作

两者都引用git+ssh://git@github.com/ReactiveX/RxJS.git存储库,但包内容看起来完全不同。

为什么他们的树差异如此之大?这两者之间的实际区别是什么?有没有理由让他们中的一个在这一刻受到青睐?

0 投票
1 回答
590 浏览

text - angular2 rxjs 过滤线程与输入文本

嗨,我正在构建一个类似 stackoverflow 的小型论坛,并且正在尝试为我的线程标题实现一个简单的文本过滤器。

我最近开始学习 rxjs 和管道,所以这是我到目前为止提出的 2 个问题

  1. 我不确定我应该使用哪种方法来解析标题,我目前正在使用 string.include() 但它不能正常工作(例如,如果我输入 who,那么“how”显示,如果我输入“how”然后“谁”显示...

更新:到目前为止,主要错误似乎是管道只收到第一个字母......但不知道是什么原因造成的。

  1. 我正在使用纯管道,并且属性通过主题传递给它,不确定这是否是最佳实践方式...

https://plnkr.co/edit/VViLYFd5oFTwNqP9eoZi?p=preview

感谢您的帮助和建议

零件

管道