use*_*528 4 observable rxjs typescript rxjs5 angular
是否可以连接多个observable?
例如:我有3个功能:
ensureUserLogged():Observable<boolean>
createEntity():Observable<Entity>
checkEntity():Observable<boolean>
Run Code Online (Sandbox Code Playgroud)
我想做的事情如下:
Observable.combine (ensureUserLogged(), createEntity(), checkEntity()).subscribe (
checkEntityResult => console.log (checkEntityResult),
error => console.log (error)
);
Run Code Online (Sandbox Code Playgroud)
或类似的东西:
ensureUserLogged().then (logged => createEntity()).then (newEntity => checkEntity ())...
Run Code Online (Sandbox Code Playgroud)
否则我需要写一个丑陋的金字塔:
ensureUserLogged().subscribe (
res => {
createEntity ().subscribe (
res => {
checkEntity ().subscribe (
res => { console.log ("I'm finally here") },
error {}
)
},
err => {
}
);
},
err => {
}
)
Run Code Online (Sandbox Code Playgroud)
有什么东西可以达到我的意愿吗?
谢谢
您需要使用Observable.forkJoin的并行执行:
Observable.forkJoin(ensureUserLogged(), createEntity(), checkEntity()).subscribe (
checkEntityResult => console.log (checkEntityResult),
error => console.log (error)
);
Run Code Online (Sandbox Code Playgroud)
checkEntityResult将对应于包含每个元素的数组:第一个结果为ensureUserLogged...
要连续执行事物,您需要使用flatMap运算符:
ensureUserLogged().flatMap((resultOfEnsureUserLogged) => {
return createEntity();
}).flatMap((resultOfCreateEntity) => {
return checkEntity();
}).subscribe((resultOfChekEntity) => {
(...)
});
Run Code Online (Sandbox Code Playgroud)
你可以注意到你可以混合东西.例如,类似的东西:
ensureUserLogged().flatMap((resultOfEnsureUserLogged) => {
return Observable.forJoin(createEntity(), checkEntity());
}).subscribe((resultOfCreateEntityAndChekEntity) => {
(...)
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3083 次 |
| 最近记录: |