我试图降低应用程序中的行数,但我无法让我的可观察量工作......
所以我有以下情况:
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 (): 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
}
但事实并非如此,它是Observable openDialog,永远不会完成/完成。我有什么想法可能做错了吗?
答案 0 :(得分:1)
return Observable.create(observable => {
this.handleDialogResult.flatMap(observable)
});
为什么你想要创建一个新的observable而你已经拥有一个:handleDialogResult
返回的那个?
我不确定我是否完全理解您的代码应该做什么,但是当您的流在第一个值发出时结束时(这是您的初始代码似乎正在做的事情),您只需要take
一个值
您的代码看起来像这样
return this.handleDialogResult(x).take(1)
如果流是包含其他流的流(正如您的flatMap
建议的那样),那么您还需要使用switch
运算符展平流
return this.handleDialogResult(x).switch().take(1)