问题标签 [angular2-observables]

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 投票
2 回答
5604 浏览

angular - Angular2:使用 concat() 链接 http 请求

我在链接多个 HTTP 请求时遇到了一些困难。

首先,请求在这个返回冷 Observable 的服务方法中定义。

表单部件服务

我有可变数量的表单部分要提交,具体取决于它们是否脏,所以我迭代了一个填充了这些表单的数组。每次调用都不依赖上一次调用的返回,我到底需要的只是最后一次调用后返回的

为此,我尝试了在concat()我看来比 . 更适合我的情况的运算符switchMap()。这是我的尝试:

零件

不幸的是,它不起作用。当我一步一步调试时,一切都很顺利,我已经stream$设置了一个观察者,stream$.concat()不会中断。但是我在网络中得到的只是第一个请求,而不是链接的。

我做错了什么?非常感谢

编辑 我用 Kwintep 提供的示例替换了我的代码,以优化请求链。不幸的是,请求被一一执行,但是一旦完成,我就会遇到以下错误unknown type returned

0 投票
2 回答
1445 浏览

angular - 不能将 concatMap() 与 angular2 Http 一起使用

我需要链接许多http请求,请求的数量是可变的,它们不依赖于前一个请求的结果,我只需要保留最后一个请求的返回对象。

在这个线程上,我得到了两个解决方案,第一个解决方案使用Observable.concat()works,但一位贡献者建议我使用更优雅的方式来执行此操作concatMap()

这是我当前的代码:

我的组件

如您所见,我有一个包含所有需要提交到后端的脏表单的数组。我从这个数组创建一个 Observable,然后我使用 concatMap() 订阅传递函数的 Observable 并等待结果,然后再触发下一个订阅。

这是submitFormPart()我的FormPartService中的方法

它应该简单地返回一个简单的冷 Observable。一切都应该正常...

当我提交表单时,出现错误unknown type returned,完整的堆栈跟踪:

我找不到这个错误来自哪里。我尝试了以下方法,从我提供的原始示例中进行测试,并以某种方式进行调试:

我的组件

返回一个 Observable 的一个 Observable ......像这样,错误消失了,http 调用执行得很好,但是它们是同时并行执行的。这不是我想要的,当然这当然不可行,但它可能只是表明问题来自 mysubmitFormPart()的返回,因此Http.post().map()来自 Angular2的返回不受欢迎concatMap()......

如果它有用,这是我当前的版本:

我还没有尝试升级这些...

谢谢你的帮助

0 投票
0 回答
706 浏览

angular - Angular 2 反应式表单编辑模型

我目前正在使用 Angular 2 的 Reactive Forms 模块,并且我对编辑对象的最佳实践有疑问。

我知道您可以在创建表单时设置初始值,例如:

初始值根据需要为空白。但是,在我的情况下,我有一个子组件,它使用与父级共享的服务。当用户在子项中选择要编辑的实体时,它应该在父项中填写表单。现在我正在使用订阅服务将值填充到表单中,然后在表单更改时更改服务中的值,如下所示:

但我觉得必须有更好的方法来处理反应式表单的编辑?没有多少文章涉及使用这些类型的表单编辑模型......

谢谢!

0 投票
1 回答
1181 浏览

angular - 如何将 Promise 转换为 Observable?

我正在从事 ionic 2 项目。我能够返回设备/手机中的所有联系人。但是我使用了由于一次请求而性能非常慢的承诺代码。现在,我想将该承诺代码更改为可观察的。请帮我解决这个问题。

Contacts.find()是我使用承诺的方法。而且此方法返回联系人的速度非常慢。

0 投票
1 回答
6002 浏览

angular - Angular 2 observable How do I extract response?

Reading data from a file, The important bit is getDefaultEquipment().

If you see the last console.log(this.data) the data is correct, it's exactly what I need. But if I return this.http.get(... () => {return this.data}) i get undefined. How do I get at and return this.data??

Obviously if I write another return such as the following, the observable hasn't completed yet, so it will return the empty data: any.

0 投票
1 回答
450 浏览

angular - Angular2 处理非组件类中的订阅

我对 Angular2 中的订阅处理有一个高级别的问题。我最近读了很多关于订阅处理不佳如何由于未正确取消订阅而导致代码中的内存泄漏的文章。

@Components 的一个简单解决方案是满足所有订阅并在 ngOnDestroy 生命周期事件中处理它们。

但是,对于不属于 @Component 并且有订阅的控制器,正确取消订阅的最佳方法是什么?目前,我正在考虑让控制器公开订阅或它自己的 onDestroy 方法,但这感觉不像可以轻松/一般地完成,所以我很想听听其他选项/意见。

谢谢!

编辑:澄清这不是服务问题,而只是控制器问题。

0 投票
1 回答
171 浏览

javascript - RxJS5 运算符与 .combineLatest 类似,但只要有单个 observable 发出就会触发

我正在寻找一种方法将多个 Observables 组合成一个标量值的平面元组 - 类似于.combineLatest()- 但除了它应该发出一个新的值元组,即使在其中一个源 observables 上没有发出任何值 - yieldung “未定义" 在那些尚未发出的可观察对象的元组中。

例子:

0 投票
4 回答
39849 浏览

angular - 如何在 Angular2 中进行嵌套的 Observable 调用

我在进行嵌套的 Observable 调用时遇到了一些麻烦。我的意思是调用一个检索用户的 http 服务,然后从用户那里获取 id 以进行另一个 http 调用,最后在屏幕上呈现结果。

1)HTTP GET 1:获取用户

2) HTTP GET 2:通过唯一标识符作为参数获取用户的偏好

这将转换为组件中的以下代码Blah.ts

版本 1 - 此代码不显示任何内容

版本 2 - 此代码有效,但对我来说似乎是错误的方法:

这是模板:

我认为显示服务没有任何意义,它只是进行http get()如下调用:

请建议哪种方法是定义 Observables 链的最佳工作方法。

0 投票
1 回答
1332 浏览

angular - angular2 将事件绑定到可观察对象

我正在尝试绑定按键事件和可观察对象,每次在文本框字段中按下一个键,我想在控制台中记录“你已按下:”+键字符串,没有显示任何错误但按下键时也没有任何反应。 .

为什么它不工作?

编辑:

无法到达映射函数内的调试器点..它看起来事件从未正确绑定..但为什么呢?

0 投票
1 回答
1092 浏览

angular - 如何在一个 Observable 上使用多个 debounceTime?

我有一个输入 html 元素并使用 Observables 执行基本类型提前搜索功能:

编码:

所以基本上我正在捕获每个键位之间至少有 200 毫秒键入的任何关键字。

现在我想保存用户在 cookie 中搜索的任何内容,以便向他们显示“您的最新搜索”,但我想在保存键入的值之前等待 3000 毫秒。

我知道下面的代码不起作用,但只是为了说明,我想实现与此类似的东西:

这是否有可能以某种方式链接运营商以不同的去抖时间做多项事情?