我想按顺序和有条件地执行两个或多个操作。操作应该按顺序执行。以下示例已经可以执行此操作。
但我做不到。根据第一次操作的结果,我想决定第二次操作是否应该起作用。根据第一个操作的结果,我想将参数传递给第二个操作。
我知道如果代码在订阅事件范围内写入,它可以工作。但它必须按顺序工作,第一个操作响应将影响第二个操作请求。同时,另外第三个操作可以添加到' concat'第一次和第二次操作的反应与'concat'运营商。同时,我想使用相同的变量上下文。我们该怎么办?
var first: Observable<any> = this.http.get("https://testdb.firebaseio.com/.json").do((result1: any) => {
//to do something with result1
console.log("first operation");
});
var second: Observable<any> = this.http.get("https://testdb.firebaseio.com/.json").do((result2: any) => {
////to do something with result2
console.log("second operation");
});
first.concat(second).subscribe();
答案 0 :(得分:1)
您可以使用switchMap
,concatMap
或mergeMap
(或者如果您使用的是rxjs4:flatMap
)执行此操作 - 如有疑问:请使用switchMap
const first$ = this.http.get("https://testdb.firebaseio.com/.json").do((result1: any) => {
//to do something with result1
console.log("first operation");
});
const second$ = this.http.get("https://testdb.firebaseio.com/.json").do((result2: any) => {
////to do something with result2
console.log("second operation");
});
first$
.switchMap(result1 => {
if (resultIsOkay(result1)) {
return second$;
} else {
return Observable.empty();
// alternatively: return Observable.of(result1);
}
})
.subscribe();