我有3个函数,每个函数调用另一个发出API请求的函数。所有这一次一个叫一个需要时间,我想要的是同时调用这三个函数来获得时间。我试图使用mergeMap()但它不起作用。什么都没发生,我试图在我的控制台中显示东西,但似乎mergeMap()中包含的代码没有被执行
这是我使用mergeMap()的代码:
from(['corps', 'disciplines', 'departements']).pipe(
mergeMap(f => {
switch (f) {
case 'corps':
this.getCorps();
break;
case 'disciplines':
this.getDisciplines();
break;
case 'departements':
this.getDepartements();
break;
}
return undefined;
})
);
顺便说一句,如果您想通过将第一个数组替换为[this.getCorps(), this.getDisciplines(), this.getDepartements()]
来删除此开关案例,并且在没有开关的情况下同时执行这3个功能,那就太棒了!
答案 0 :(得分:2)
针对您的问题的Awsome解决方案将使用名为ngrx的Reactive extension for Angular中的effects
。
尽管提供商店管理,但它也集中在触发所有状态变化。这是我的应用程序中的示例,在使用ngrx实现它之后,您的代码(考虑一些重构)是什么样子:
@Effect()
someObservable$: Observable<Action> = this.actions$.ofType(IDENTIFIER_FOR_CALLING_ALL_3_FUNCTIONS).pipe(
.forkJoin(() => [service.getCorps(), service.getDisciplines(), service.getDepartements()])
.catch(err => {
return Observable.of(new FAILURE_ACTION_IDENTIFIER());
})
);
我无法检查上面的代码是否100%准确地编写,但它保留了这个概念。这里有什么值得注意的:
IDENTIFIER_FOR_CALLING_ALL_3_FUNCTIONS
可以是任何操作,可以有很多操作,只需在它们之间添加逗号。Service
)我知道它可能没有很好地呈现,所以我放在introduction course to ngrx/store and ngrx/effects以及link to official Github repository