RxJs堆栈可观测值
我试图在应用程序中降低我的行数,但我无法让我的观测值工作 因此,我有以下场景:RxJs堆栈可观测值,rxjs,Rxjs,我试图在应用程序中降低我的行数,但我无法让我的观测值工作 因此,我有以下场景: let openDialog = function (): Observable<any> { // some logic that defines x let x = 0; // return return Observable.create(observable => { this.handleDialogResult(x).subscribe
let openDialog = function (): Observable<any> {
// some logic that defines x
let x = 0;
// return
return Observable.create(observable => {
this.handleDialogResult(x).subscribe(
() => {
observable.next();
observable.complete();
},
e => {
observable.error(e);
observable.complete();
}
)
});
}
let handleDialogResult = function (x): Observable<any> {
switch (x) {
case 1:
return this.doMagic('Magic1');
case 2:
return this.doMagic('Magic2');
}
}
let doMagic = function (x): Observable<any> {
// some magic
}
let openDialog=function():可观察{
//定义x的一些逻辑
设x=0;
//返回
返回Observable.create(Observable=>{
此.handleDialogResult(x).订阅(
() => {
可观察的。下一步();
可观察的,完全的;
},
e=>{
可观测误差(e);
可观察的,完全的;
}
)
});
}
让handleDialogResult=函数(x):可观察{
开关(x){
案例1:
返回此.doMagic('Magic1');
案例2:
返回此.doMagic('Magic2');
}
}
设doMagic=函数(x):可观测{
//一些魔法
}
然后,当您执行以下操作时,我会认为我获得了相同的功能:
let openDialog = function (): Observable<any> {
// some logic that defines x
let x = 0;
// return
return Observable.create(observable => {
this.handleDialogResult.flatMap(observable)
});
}
let handleDialogResult = function (x): Observable<any> {
switch (x) {
case 1:
return this.doMagic('Magic1');
case 2:
return this.doMagic('Magic2');
}
}
let doMagic = function (x): Observable<any> {
// some magic
}
let openDialog=function():可观察{
//定义x的一些逻辑
设x=0;
//返回
返回Observable.create(Observable=>{
此.handleDialogResult.flatMap(可观察)
});
}
让handleDialogResult=函数(x):可观察{
开关(x){
案例1:
返回此.doMagic('Magic1');
案例2:
返回此.doMagic('Magic2');
}
}
设doMagic=函数(x):可观测{
//一些魔法
}
但事实并非如此,它是可观察的openDialog,永远不会完成。你知道我做错了什么吗 嗯,这条线看起来可疑:
return Observable.create(observable => {
this.handleDialogResult.flatMap(observable)
});
既然已经有了一个可观察对象,为什么还要创建一个新的可观察对象:由handleDialogResult
返回的对象
我不确定我是否完全理解您的代码应该做什么,但是为了让流在第一个值发出时结束(这是您的初始代码似乎正在做的),您只需要获取一个值
您的代码如下所示
return this.handleDialogResult(x).take(1)
如果流是包含另一个流的流(如flatMap
所示),则还需要使用开关
操作符展平流
return this.handleDialogResult(x).switch().take(1)
为什么需要flatMap
流。它看起来不像一条小溪