是否可以连接多个observable?
例如: 我有3个功能:
ensureUserLogged():Observable<boolean>
createEntity():Observable<Entity>
checkEntity():Observable<boolean>
我想做点什么:
Observable.combine (ensureUserLogged(), createEntity(), checkEntity()).subscribe (
checkEntityResult => console.log (checkEntityResult),
error => console.log (error)
);
或类似的东西:
ensureUserLogged().then (logged => createEntity()).then (newEntity => checkEntity ())...
否则我需要写一个丑陋的金字塔:
ensureUserLogged().subscribe (
res => {
createEntity ().subscribe (
res => {
checkEntity ().subscribe (
res => { console.log ("I'm finally here") },
error {}
)
},
err => {
}
);
},
err => {
}
)
有什么能实现我的意愿吗?
由于
答案 0 :(得分:7)
您需要使用Observable.forkJoin
进行并行执行:
Observable.forkJoin(ensureUserLogged(), createEntity(), checkEntity()).subscribe (
checkEntityResult => console.log (checkEntityResult),
error => console.log (error)
);
checkEntityResult
将对应于包含每个元素的数组:ensureUserLogged
的结果的第一个元素,...
要执行串行,您需要使用flatMap
运算符:
ensureUserLogged().flatMap((resultOfEnsureUserLogged) => {
return createEntity();
}).flatMap((resultOfCreateEntity) => {
return checkEntity();
}).subscribe((resultOfChekEntity) => {
(...)
});
你可以注意到你可以混合东西。例如:
ensureUserLogged().flatMap((resultOfEnsureUserLogged) => {
return Observable.forJoin(createEntity(), checkEntity());
}).subscribe((resultOfCreateEntityAndChekEntity) => {
(...)
});