在这种特殊情况下,我不知道用rxjs处理html错误的最佳方式:
component.ts
private open() {
this.openSubscription = this.openService
.open(this.id)
.subscribe(res => {
if (res) {
// do something with result
} else {
this.openInError = true;
}
});
}
打开服务.ts
open(id: number): Observable<OpenContext> {
const openContextObservable = new Observable<OpenContext>(
observer => {
this.openApiService
.first(id)
.pipe(
catchError(err => of(err))
)
.subscribe(res => {
this.openApiService
.second(res.param1)
.pipe(
map(result=> {
// do something with the result
observer.next(openContext);
observer.complete();
}),
catchError(err => of(err))
)
})
})}
在服务API中,我只是返回this.http.post(…),其中一些参数为可观察的
我想先捕捉错误,并在组件的订阅中处理它(subscribe(res =)
执行此操作并拥有干净代码的最佳方法是什么?我使用throwError进行了测试,…但我被阻止了…
因此,组件中预期的代码将是:
private open() {
this.openSubscription = this.openService
.open(this.id)
.subscribe(
res => {
if (res) {
// do something with result
}
},
err => {
if (err) {
this.openInError = true;
}
});
}
或类似的东西。管道和地图。
1.) 删除 catchError
s,因为这将捕获错误并将错误流转换为非错误流。
2.) 使用 switchMap
而不是嵌套订阅。
打开服务.ts
import { switchMap } from 'rxjs/operators';
....
open(id: number): Observable<OpenContext> {
// you can get rid of openContextObservable as well.
return this.openApiService
.first(id)
.pipe(
// switch to this observable from the first one
switchMap(res => this.openApiService.second(res.param1)),
map(result => {
// do stuff and transformations here but make sure you return result for your subscriber.
return result;
})
);
)}
成分
private open() {
this.openSubscription = this.openService
.open(this.id)
.subscribe(
res => {
if (res) {
// do something with result
}
},
err => {
if (err) {
this.openInError = true;
}
});
}
我有一个HTTP请求,希望将结果共享给多个组件。当然,HTTP请求返回一个可观察的。我希望多个组件能够订阅此服务,而不会触发额外的HTTP请求。 我在一个组件中使用实现了这一点,该组件按需发出HTTP请求,并有另一种方法订阅该主题。虽然这是可行的,但似乎有些过分,而且肯定有更好的方法。 主题服务 和一个订户 和第二个订户 从管道链中删除时,会发出多个网络请求。是否有一种更优雅/正确的方式将观察到的
在我的角度应用程序中,我将状态作为 BehaviorSubject 存储在服务中,当数据来自服务器时,我调用下一个函数来更新数据并通知所有订阅者。 伪代码: 由于很多组件都订阅了该 BehaviorSubject,我认为在我的应用程序加载时可能会导致一些性能问题:在加载时,有很多来自服务器的通知,每次下一个函数称为组件时都会渲染。 你认为如果我将呼叫延迟到大约500毫秒后,我会看到性能提高吗?rx
我有一个服务,有一个方法foo。在该方法中,我订阅了一个可观察的(超文本传输协议-客户端)。 我喜欢从foo返回一个布尔值,该值取决于get。这不起作用,因为http.get是asynchrouns-在http.get完成之前调用return。 我怎样才能使这个同步? 编辑 返回可观察的布尔值在这里不是一个选项。这是因为我处理get in foo的响应(此处未显示),但我也需要根据它的返回来执行f
我有以下2个组件,它们应该首先从Mongo中删除文档,然后从Elastic中删除。 主要流程: 服务: 不幸的是,deleteDocumentInMongo从未被调用。我可以在日志中看到bean已正确注册。 我是做错了什么,还是你需要更多的调试信息?如果我窃听手柄,则deleteDocumentInES。执行输入,但忽略mongo流。
我在这里安装有棱角的材料就是我所做的 通过以下命令成功安装了Angle material Angula CDK无法使用以下命令安装 我在cmd中遇到以下错误: 参考我从来没有这个问题,这发生在我卸载了cdk和角材料之后,所以现在我试图再次安装它, 我需要做什么来解决这个问题?
问题内容: 我正在开发一个巨大的旧版Java应用程序,其中包含许多手写内容,如今您可以让一个框架来处理。 我现在面临的问题是,我们的Solaris Server上的文件句柄用尽了。我想知道跟踪打开文件句柄的最佳方法是什么?在哪里查看,什么会导致打开的文件句柄用尽? 我不能在Solaris下调试应用程序,只能在Windows开发环境上调试。分析Windows下的打开文件句柄是否甚至合理? 问题答案: