gpt4 book ai didi

typescript - 连接 rxjs Observables

转载 作者:太空狗 更新时间:2023-10-29 17:45:50 25 4
gpt4 key购买 nike

是否可以连接多个可观察对象?

例如:我有 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 => {
}
)

有什么东西可以实现我的意志吗?

谢谢

最佳答案

您需要使用 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) => {
(...)
});

关于typescript - 连接 rxjs Observables,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36221115/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com