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