顺序订阅一系列可观察对象
Sequential subscription to an array of observables
在这里,我使用了 rxjs 中的 forkJoin
来并行订阅一组可观察对象。但我想一一订阅,最好的解决方案是什么?
下面是我的代码:
var observables = [];
Observable.forkJoin(observables)
.subscribe(() => {
this.msgs = [];
this.msgs.push({
severity: 'success',
summary: 'Saved Successfully'
});
this.onSaveComplete();
}, (error: any) => this.errorMessage = <any>error);
}, (error: any) => this.errorMessage = <any>error);
使用 the switchMap
operator 进行一系列 依赖请求 。错误会传播,您可以在链的末尾捕获或以其他方式处理它们。
return this.http.get('something/1')
.switchMap(res1 => {
// use res1 if you need it
return this.http.get('something/2')
})
.switchMap(res2 => {
// use res2 if you need it
return this.http.get('something/3')
})
.subscribe(res3 => {
// use the final response
console.log(res3)
})
替代 forkJoin 意味着您需要按顺序订阅可观察数组。 merge
和 concat
是这种情况下的方法。在您的情况下,修改您的代码并在使用 merge
和 concat
时在可观察数组的最开头使用扩展运算符。
var observables = [];
Observable.concat(...observables)
.subscribe(() => {
this.msgs = [];
this.msgs.push({
severity: 'success',
summary: 'Saved Successfully'
});
this.onSaveComplete();
}, (error: any) => this.errorMessage = <any>error);
}, (error: any) => this.errorMessage = <any>error);
在这里,我使用了 rxjs 中的 forkJoin
来并行订阅一组可观察对象。但我想一一订阅,最好的解决方案是什么?
下面是我的代码:
var observables = [];
Observable.forkJoin(observables)
.subscribe(() => {
this.msgs = [];
this.msgs.push({
severity: 'success',
summary: 'Saved Successfully'
});
this.onSaveComplete();
}, (error: any) => this.errorMessage = <any>error);
}, (error: any) => this.errorMessage = <any>error);
使用 the switchMap
operator 进行一系列 依赖请求 。错误会传播,您可以在链的末尾捕获或以其他方式处理它们。
return this.http.get('something/1')
.switchMap(res1 => {
// use res1 if you need it
return this.http.get('something/2')
})
.switchMap(res2 => {
// use res2 if you need it
return this.http.get('something/3')
})
.subscribe(res3 => {
// use the final response
console.log(res3)
})
替代 forkJoin 意味着您需要按顺序订阅可观察数组。 merge
和 concat
是这种情况下的方法。在您的情况下,修改您的代码并在使用 merge
和 concat
时在可观察数组的最开头使用扩展运算符。
var observables = [];
Observable.concat(...observables)
.subscribe(() => {
this.msgs = [];
this.msgs.push({
severity: 'success',
summary: 'Saved Successfully'
});
this.onSaveComplete();
}, (error: any) => this.errorMessage = <any>error);
}, (error: any) => this.errorMessage = <any>error);