Angular 6 - Как назначить участника в результате подписки в

1

У меня есть следующий код:

m_SystemOptions: KeyValueEntity[];
    OnInitializeFramework(): any
    {
        this.GetSystemSettings().subscribe(
            response  =>
            {
                if (response.IsSuccess)
                {
                    this.m_SystemOptions = response.Entities;
                }
                else
                {
                    this.UnexpectedMessage(response.ResponseMessage);
                }
            });

    }

В идеале я хотел бы, чтобы это было примерно так:

this.m_SystemOptions = this.GetSystemSettings().SomeMagic()
or
this.m_SystemOptions = SomeMagic(this.GetSystemSettings());
or at the very worst:
 SomeMagic(this.GetSystemSettings(), this.m_SystemOptions);

this.GetSystemSettings - это функция, которая возвращает тот же тип, что и this.m_SystemOptions

Поскольку мой код имеет эту структуру десятки раз, я хотел бы сократить его

Все, что мне не хватает, это SomeMagic()

РЕДАКТИРОВАТЬ:

Я пропустил небольшую, но важную часть. GetSystemSettings() не возвращает тот же тип напрямую, но обернут в некоторую структуру управления, которая совместно используется в приложении. Внутри этого есть в основном просто вызов httpClient. get(), который возвращает подписку, я бы хотел не касаться этой части, ее тонкой и общей информации. Я хотел бы удалить повторяющуюся часть, которую я опубликовал выше, которая обрабатывает как успешный ответ, так и неудачу и изменяет его на нечто более общее сделать код в компоненте более удобочитаемым

export class BaseResponse
{
    IsSuccess: boolean;
    ResponseCode: number;
    ResponseMessage: string;
    ResponseExtendedMessage: string;
}
export abstract class BaseEntitiesResponse<TEntity extends BaseEntity> extends BaseResponse { Entities: TEntity[] }


export class KeyValueEntity extends BaseEntity
{
    Key: string;
    Value: string;
}


 //Get the settings
    private GetSystemSettings(): Observable<BaseEntitiesResponse<KeyValueEntity>>
    {
        return this.api.ExecuteGetAction("System", "SystemOptions");
    }
  • 0
    this.m_SystemOptions = await this.GetSystemSettings (). toPromise (); Но почему ты не хочешь сделать это? : this.GetSystemSettings (). subscribe (value => this.m_SystemOptions = value);
Теги:
angular
rxjs

1 ответ

0

Она не идеальна, чтобы subscribe на вызов метода. Вы должны подписаться только тогда, когда вам это нужно, поэтому Observable называется "ленивым". ваш GetSystemSettings должен выглядеть примерно так:

this.GetSystemSettings().pipe(map(
    response  =>
    {
      if (response.IsSuccess)
      {
        return response.Entities;
      }
      else
      {
        return []; // Error message can be handled more gracefully :)
      }
     }));

и подписаться на метод

this.GetSystemSettings().subscribe(entities => this.m_SystemOptions = entities);
  • 0
    Я обновил вопрос с более подробной информацией, чтобы сделать его более понятным
  • 0
    Я не вижу, как это сокращает код ..
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню