Marcin
Marcin

Reputation: 155

Convert ngrx actions$ (Observable) to Promise

I have a problem with convert Observable to Promise to use in Angular APP_INITIALIZER

part of my 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 {}

Upvotes: 1

Views: 542

Answers (1)

olivarra1
olivarra1

Reputation: 3409

As mentioned in my comment, toPromise() doesn't resolve until the source completes.

So one easy way to make it complete, is to take only the first:

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

Upvotes: 4

Related Questions