Как получить результат асинхронного действия в NGXS? - PullRequest
0 голосов
/ 30 сентября 2019

Я хочу выполнить действие, основанное на результате асинхронного действия NGXS.

В приложении внешнего вида Angular я использую NGXS для управления состоянием. Некоторые действия включают в себя общение с бэкэндом через вызовы REST. Эти действия реализованы как асинхронные действия , с функциями-редукторами в моих классах состояний , возвращающих Observable.

Я ищу способ получить рукипо результатам внутреннего вызова, чтобы иметь возможность выполнить какое-то действие.

Один вариант использования, который я пытаюсь реализовать, - это навигация к только что созданным объектам: бизнес-объекты создаются в приложении frontend (Angular) с парой свойств домена. Они сохраняются в бэкэнде, и в результате ID для этого объекта создается и возвращается во внешний интерфейс и включается в хранилище NGXS. Как прямой ответ на это, я хотел бы перейти к подробному представлению для нового объекта. Для этого мне нужно

  • (a) информация о том, что вызов был возвращен успешно, и
  • (b) ответ от бэкэнда (в данном случае идентификатор).

Еще один немного более сложный вариант использования - это присвоение некоторого количества тегов бизнес-объекту. Тэги сами по себе являются сущностями и имеют каждый идентификатор. В пользовательском интерфейсе пользователь может выбрать существующие или добавить новые теги. В любом случае, несколько тегов могут быть добавлены за один шаг в пользовательском интерфейсе, что означает, что мне нужно

  1. вызвать бэкэнд для каждого нового тега, чтобы создать идентификатор
  2. после того, как все пропущенотэги создаются, обновляйте бизнес-объект списком идентификаторов тэгов

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

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

...