将 ngrx actions$ (Observable) 转换为 Promise

Convert ngrx actions$ (Observable) to Promise

我在将 Observable 转换为 Promise 以在 Angular APP_INITIALIZER

中使用时遇到问题

我的一部分app.module.ts:

import {Actions, ofType} from '@ngrx/effects';
import {MyEffects} from './store/my.effects';
import * as MyActions from './store/my.actions';


function loadPermissions(actions$: Actions) {
  return () => actions$.pipe(ofType(MyActions.fetchPermissionsSuccess)).toPromise() // this promise is dead
}

@NgModule({
  declarations: [AppComponent],
  imports: [
    StoreModule.forRoot({}, {}),
    EffectsModule.forRoot([MyEffects]),
  ],
  providers: [
    {
      provide: APP_INITIALIZER,
      useFactory: loadPermissions,
      deps: [Actions],
      multi: true,
    },
  ],
})
export class AppModule {}

正如我在评论中提到的,toPromise() 在源代码完成之前不会解析。

所以一个简单的方法来完成它,就是只取第一个:

actions$.pipe(
  ofType(MyActions.fetchPermissionsSuccess),
  take(1)
).toPromise();