4

複数のオブザーバブルを連結することは可能ですか?

例:私は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 => {
    }
)

私の意志を達成するために何かがありますか?

ありがとう

4

1 に答える 1

8

並列実行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) => {
  (...)
});
于 2016-03-25T13:44:13.583 に答える