Только получение последней буквы строки - PullRequest
0 голосов
/ 12 июня 2018

Я использую NgRX 6 с Angular 6.

У меня есть эффект, который вызывает службу, эта служба возвращает строку.

По какой-то причине я получаю только последнюю буквустрока.

Это мой эффект

  @Effect()
  identityRedirect$ = this.actions$.pipe(
    ofType(REDIRECT_TO_LOGIN),
    switchMap(() =>
      forkJoin(this.discoverService.getServiceUrl('{api:identity}'), this.discoverService.getServiceUrl('{site:self}'))
    ),
    mergeMap(([x, y]: [string, string]) => {
      console.log(x);
      console.log(y);
      return of({ type: REDIRECT_TO_LOGIN_SUCCESS, payload: 'foo' });
    })
  );

Я думал, что forkJoin поможет, но все, что я вижу в своем журнале консоли, это последняя буква

Мой сервис обнаружения выглядит следующим образом

import { Injectable } from '@angular/core';
import endpoints from './endpoints';

@Injectable()
export default class DiscoverService {
  constructor() {}

  public getServiceUrl = (service: string) => {
    const { domain, endpoint } = this.splitServiceObject(service);
    return endpoints[domain][endpoint]['uri'];
  }

  private splitServiceObject = (service: string) => {
    const moduleParams = service.split(/{(.*)}/);
    const [domain, endpoint] = moduleParams[1].split(':');
    return { domain, endpoint };
  }
}

1 Ответ

0 голосов
/ 12 июня 2018

Поэтому я изменил свой эффект, чтобы он выглядел следующим образом

  @Effect()
  identityRedirect$ = this.actions$.pipe(
    ofType(REDIRECT_TO_LOGIN),
    switchMap(() =>
      combineLatest(
        this.discoverService.getServiceUrl('{api:identity}'),
        this.discoverService.getServiceUrl('{site:self}')
      )
    ),
    mergeMap(([auth, redirect]: [string, string]) => {
      console.log(auth);
      console.log(redirect);
      return of({ type: REDIRECT_TO_LOGIN_FAILURE, payload: 'error' });
    })
  );

Мне также нужно было обновить мой сервис, как этот

import { Injectable } from '@angular/core';
import { Observable, of } from 'rxjs';

import endpoints from './endpoints';
import { map } from 'rxjs/operators';

@Injectable()
export default class DiscoverService {
  constructor() {}

  public getServiceUrl = (service: string): Observable<string> => {
    return this.splitServiceObject(service).pipe(map(([domain, endpoint]) => endpoints[domain][endpoint]['uri']));
  }

  private splitServiceObject = (service: string): Observable<any> => {
    const moduleParams = service.split(/{(.*)}/);
    // const [domain, endpoint] = moduleParams[1].split(':');
    return of(moduleParams[1].split(':'));
  }
}
...