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

angular - Angular2,RxJS 主题 http 请求 - 错误请求不会再次触发

收到 http 错误响应(来自后端的 422 验证错误)时出现问题。

收到 http 错误响应后,我无法再次触发请求(单击按钮)。

1) 我有一个主题属性,我调用 .next(whatEverDataForTheRequest),以便启动对 API 的请求。

2)在构造函数中,我订阅了主题(.asObservable),只要响应成功,这里就一切正常,但发生错误时就不行了。

代码目前是这样的:

单击按钮时,我创建一个有效负载/对象并像这样传入:

然后在构造函数中,我有以下代码,当调用 .next 时会触发这些代码。

成功的请求按预期工作 - 但是当从后端收到错误时,调用:

...被完全忽略,每当单击按钮时 - >订阅逻辑永远不会启动。

我在这里想念什么?(我在 ngOnDestroy 中取消订阅)

谢谢!


编辑编辑 - 工作示例(由 Martin 发布)

0 投票
1 回答
72 浏览

javascript - 为什么订阅完成后也可以在主题上调用?

根据大多数博客,一旦我们调用完成,我们就不需要明确取消订阅主题。我在调用完成后尝试订阅该主题。完整的回调仍然被执行。

输出:完成

为什么主题完成后允许订阅?

0 投票
3 回答
378 浏览

angular - Angular - 为什么每次我发出新值时都会调用 ngOnInit?

我的服务中有一个名为refreshSubject$的主题。

每次添加用户时,他都会发出一个新值。

我在我的服务上使用 get 方法来检索值

现在每次我添加一个新用户时,我都会使用next()方法发出一个新值。

在我的组件内部,我有我的生命周期钩子 ngOnInit,每次refreshUsers$主题发出新值时都会调用他。

为什么每次订阅新值时都会调用 ngOnInit?

0 投票
3 回答
148 浏览

angular - Subject(作为 Observable 的一个特例)和 Observable 之间的区别

根据Subject 上的文档,这是Observable的一个特例,它让所有的观察者共享一个共同的执行路径。该示例显示每个观察者在订阅源后都会获得相同的发出值。

我并不完全清楚它与计划Observable发射值的情况有何不同。多个订阅者中的每一个都将收到每个next 'ed 值。在相应订阅之前发出的值不会被传递(除非我们在某些shareReply中明确地使用管道)。

使Subject成为Observable的特例的实际区别是什么?我错过了明显的,可能。

0 投票
1 回答
67 浏览

angular - 未发出 BahaviorSubject 的 Observable

我有一个服务返回数据模型。该模型包含 DateTime 属性 ( RelevantDateTime ) - 从服务器返回的当前 UTC DateTime。我想在与执行服务的组件不同的组件中使用这些数据。我正在使用 BahaviorSubject(我使用过Subject并将其更改为 BahaviorSubject)来执行此操作。它应该很简单,但不知何故我遗漏了一些东西 - 没有发出可观察的东西 - 需要数据的组件(HeaderComponent)没有得到它。查看我的代码:

这是执行服务的组件:

这是需要 RelevantDataTime 的组件

0 投票
2 回答
590 浏览

angular - 文件上传进度未在可观察对象中更新或在可观察对象准备好之前完成

下面是调用下面函数的代码片段。这是一个允许人们将文件从系统拖放到网站的过程。它显示所有文件的列表,并在加载时带有进度条。它在大多数情况下都可以正常工作,但是当有大量文件时,我会遇到一些问题。我有一个正在加载的测试目录,其中包含 100 多个文件。正在加载的第一个文件非常小,因此似乎在设置可观察对象之前已加载它们,因为进度条未显示任何进度并且 forkJoin 未完成,但如果我查看系统文件是实际加载。

我没有正确设置主题吗?有没有更好的方法来跟踪正在上传的文件的进度?任何帮助,将不胜感激。

0 投票
2 回答
790 浏览

angular - 行为主题仅显示初始值/重播主题不显示更新值

背景:

我有一项服务,我有一个基于开放图层的地图。地图组件有自己的服务。

单击图标时会生成一个弹出窗口。在此弹出窗口上是一个按钮,单击该按钮可从弹出窗口中显示的对象中获取一些数据,然后导航到不同的组件。

我试图将此数据发布/添加到行为主题,然后在新组件中订阅它。单击图标时,会将数据添加到行为主题。弹出组件有自己的服务。

在目标组件中,我尝试使用异步管道订阅模板中的弹出服务行为主题。

问题:

行为主体上的 observable 只返回初始值。行为主题的下一个功能似乎不会向其添加新数据。它总是赋予新的价值。

使用重播主题时,没有任何显示。下一个功能似乎根本没有效果。

代码 :

弹出服务

地图服务

目的地服务

然后在目标组件中只有一个异步管道。

我已经尝试过的:

  1. 直接从弹出服务导入行为主题,而不通过我的项目结构移动它。

  2. 如示例代码所示,使用行为主题而不是重播主题。

  3. 将所有三个服务添加到 app.module.ts 中的 providers 数组。行为主体仍然发出原始值,而重放主体则什么也没有。

更新: 弹出服务

门店服务

0 投票
2 回答
162 浏览

rxjs - RxJS:只要所有主题都发出真值,就发出新值

我有两个科目:networkStateSubjectauthStateSubject

networkStateSubject发出boolean值:

    true如果启用了网络连接,

    false如果网络连接被禁用。

authStateSubject发出boolean值:

    true如果用户登录,

    false如果用户注销。

我需要将这两个主题结合起来,这样每当它们的值都是 时,就会从组合的 observable 中发出true新值 (void ) 。

0 投票
2 回答
75 浏览

angular - Rxjs: Observables 和 Subjects 排序

我有一个“用户”组件及其相关服务:userService。我想将组件表单用于新建和编辑。

订阅服务主题时,用户组件与其他几个组件(国家和州)及其服务相关。

用户组件 ngOnInit:

在编辑上下文(参数中的用户 ID)中,我需要订购请求: - 获取用户 - 获取有关 user.country.id 的状态列表

然后我尝试了这样的事情:

但它不能正常工作...谢谢您的帮助,

0 投票
0 回答
893 浏览

angular - 带有Subject.subscribe的Angular 9服务在模块外不起作用

我对这个问题做了一个更简单的版本。

服务代码:

订阅服务的组件:

从库项目中的任何组件触发 changeMes​​sage 时

它工作正常

当尝试从应用程序内部的组件中执行此操作时,它会导入库

接下来不触发。

编辑:

九金库.module.ts

app.module.ts