问题标签 [subject-observer]

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

angular - 使订阅在 Angular 4 中等待主题

我的 HTML 中有一个文本字段,它根据输入的文本实时调用后端服务。如果用户输入“abc”之类的内容,我的服务将返回一个具有此“abc”名称的对象数组。

我为此使用 Observable 和 Subject ,并且我在我的组件中返回已处理的服务。请看代码。

HTML 代码

组件代码

当 II 键入“abc”时,它会调用此fetchSearchStringData方法。服务调用只不过是简单的 restService.post 调用,然后设置对象是可观察的。使用该数据过滤某些内容并返回最终的数组。

但是我的组件 .subscribe 我们第一次被调用,并且只有一次,它显示了未定义的值。(我被安慰的地方。记录“结果”)。

我如何确保在订阅组件时从服务返回后获取数据?

提前致谢。

0 投票
1 回答
4631 浏览

ios - RxSwift 触发可观察执行

我有一个Subject可观察的表示需要传递给多个订阅者的网络请求的结果。

我可以使用ReplaySubject缓冲区 1 和publish()方法。但是,网络请求只执行一次。

我想在将来的任何给定点触发 fetch 事件。如何触发新请求?

目前,我有一个Service包含 的对象,ReplaySubject并且有一个reload()触发网络请求并将结果发布到 a 的方法ReplaySubject

是否有任何方法Observable可以“刷新”它并向所有当前订阅者提供新价值?

0 投票
1 回答
427 浏览

rxjs - 代理一个 Observable 并在回调中连接它

我试图返回一个Observable在回调中异步创建的:

因此,我使用 aSubject作为订阅Observable回调底层的单播代理。

这个解决方案的问题是,当我取消订阅Subject' 订阅时,取消订阅不会转发到底层Observable. 看起来我需要某种类型的引用来在Subject没有更多订阅者时取消订阅,但是在这种命令式回调样式中使用它时我无法弄清楚。

我必须保持mkAsync空白,并正在寻找替代实现。

这是正确的方法吗?是否有使用 的替代解决方案Subject

取消订阅主题时,如何确保Observable取消创建的(unsubscribe在 上调用)?Subscription

0 投票
2 回答
1468 浏览

angular - Angular 6 RxJs:尝试使 obj 可观察以用于其他组件

服务

零件

问题

我正在尝试设置一个可从许多组件读取和写入的 Observable。如上所示;我在我的服务中设置了 observable,但我的组件getMode()不起作用。任何想法为什么?

0 投票
1 回答
1643 浏览

android - RxJava PublishSubject+Debounce:第二项未发出

我想使用 PublishSubject + debounce(在订阅逻辑中)延迟发射我的项目。这是我的代码:

订阅逻辑:

并发出对象逻辑:

但是在订阅时,我只收到第一个发出的项目(obj1)。如果我再次发出两个对象(obj3,obj4),我只会收到第一个发出的项目(obj3)。

如何解决?

0 投票
1 回答
111 浏览

javascript - 可观察订阅函数中的值不正确

我已经使用 BehaviorSubject 编写了一个自定义事件总线。它只是在发布者发布事件时执行订阅者传递的订阅。事件总线逻辑似乎工作正常,但订阅执行时我的局部变量没有正确更新。以下是代码:

这是一个简单的逻辑,它检查 map 对象的 menu 属性是否为 false,然后它会做一些工作并将其设置为 true,这样当再次调用订阅时,相同的逻辑不会被执行两次。

问题:由于某种原因,第二次调用订阅时,菜单属性仍然为 false。我了解 js 的异步行为,但这次对我来说并没有增加。

以下是输出:

问题出现在第 679 毫秒。当对象属性在第 678 毫秒设置为 true 时,为什么它在第 679 毫秒显示为 false?

编辑:如果它是像 Java 这样的其他多线程语言,我会假设不能保证执行顺序。稍后的执行(679)可能仍然会获得 this.map["menu"] 的旧值,因为线程可能未同步。但这是单线程 Javascript,可以保证在 678 处更改变量后执行 679 处的代码。没有什么能改变这一事实,比如结果的值等。

编辑:可能BehaviourSubject是这里的罪魁祸首吗?是不是通过某种方式内部功能BehaviourSubject不能保证执行顺序?

0 投票
2 回答
88 浏览

rxjs - 主题的 RxJS 主题

我正在尝试创建一个下载资产列表的主题,该列表为每个资产发送操作,如果可能的话,使用主题的主题?

这些文件似乎正在下载等。我可以控制台记录进度 - 当我尝试映射结果时,什么都没有被触发。

这是因为我是从订阅开始的吗?

0 投票
2 回答
11949 浏览

angular - Angular 6 - 行为主题:刷新后获取数据

我正在尝试在课程详细信息组件和课程播放组件之间传递数据。我使用了共享服务和 BehaviorSubject。数据通过服务正确传递到课程详细信息,当通过课程详细信息 html 页面转到课程播放 html 页面时,它工作得很好,但是当我刷新页面时,它使用的是我在服务。我需要找到一种方法让 id 在从 course-play 获得它后一直留在服务中,并在我获得另一个课程 id 时保持更新。这是我的代码:

课程.ts

课程服务

course-detail.component

课程播放组件

0 投票
1 回答
1702 浏览

angular - RxJS 和 Angular 6 - 可观察对象、主题和基本的获取和添加数组操作

我正在努力围绕可观察对象/观察者/主题和角度来思考。我浏览了许多涵盖可观察基础知识的教程,并且基本订阅方案很有意义。然而,这些教程似乎并未涵盖添加到可观察集合中。他们中的大多数似乎也专注于使用 HttpClient,而我试图在不依赖 Web 服务的情况下模拟一些数据 - 只是用于测试的基本内存中对象数组。

我创建了一个简单的应用程序来展示我的困惑。

组件 1 和服务 1 展示了获取数字集合和添加新数字的基本不可观察方式。组件 2 和服务 2 展示了一种可观察到的获取数据并由于订阅而自动获取更新的方式。我正在使用主题来做到这一点。

https://github.com/rpaschnikov/observable-test-app

谁能指出我是否走在正确的道路上,还是我完全误解了可观察到的模式?我需要在这里使用主题还是应该能够坚持使用 Observables?如果是这样 - 我如何从中提出 next() 通知?最重要的是,有没有人知道为什么第一个this.subject.next()不触发更新,而进一步调用呢?

谢谢大佬!!

0 投票
1 回答
9696 浏览

angular - 如何将对象添加到可观察的数组中

我有一个带有名为 BookService 的服务的 Angular 项目。

该服务帮助我监视书籍列表中的更改,我还希望能够使用 addBookToList 函数将一本书添加到列表中,但我不知道如何将一本书添加到 this observable(主题观察者) 是否可以添加一本书