是否可以连接多个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) => { (...) });