加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

typescript – 连接rxjs Observables

发布时间:2020-12-17 17:21:46 所属栏目:安全 来源:网络整理
导读:是否可以连接多个observable? 例如: 我有3个功能: ensureUserLogged():ObservablebooleancreateEntity():ObservableEntitycheckEntity():Observableboolean 我想做的事情如下: Observable.combine (ensureUserLogged(),createEntity(),checkEntity()).su
是否可以连接多个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 => {
    }
)

有什么东西可以达到我的意愿吗?

谢谢

解决方法

您需要使用Observable.forkJoin进行并行执行:

Observable.forkJoin(ensureUserLogged(),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) => {
  (...)
});

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读