Что ж, как программист старой школы, мы закончили с некоторыми рецептами, которые на самом деле были успешными в повседневных вопросах. Одним из них является создание «основной записи» (если она не существует) и сохранение ее в API перед добавлением в нее элементов. Поскольку публикация в API откладывается как «побочные действия» для новых шаблонов «управления состоянием», этот фактический код в одном из моих сервисов:
// removed meaningless code and simplified as verbal
// functions some careless code operations
// tries to find if there is any cart available
// if so, retrieves it, else creates a new one
let existingCart = anyExistingCartAvailable();
if (existingCart) {
cart = exisingCart;
} else {
cart = new cart();
// Post the cart to get the Id on the DB.
PostCart(cart);
}
selectedItemsArray.foreach(item => {
cart.Items.push(itemUpdateCartId(item))
});
PostCart(cart);
Теперь, с NGXS и State Management, я ' Я пытаюсь что-то вроде этого:
let existingCart = anyExistingCartAvailable();
if (existingCart) {
cart = exisingCart;
} else {
cart = new cart();
}
const cartSubs = store.select(CurrentCart).subscribe((cCart) => {
selectedItemsArray.foreach(item => {
cart.Items.push(itemUpdateCartId(item))
});
// Don't want to get into the subscription again
cartSubs.unsubscribe();
// Update cart header and items.
store.dispatch(new PostCart(cCart));
});
// As it's in the same store, It will trigger the "CurrentCart" select.
store.dispatch(new PostCart(cart));
Но когда я перехожу через код, он попадает в код подписки перед отправкой нового действия PostCart()
внизу. Пробовал с оператором .pipe(skip(1))
Rx JS, но затем селектор не срабатывает.
Даже я выложил один пример кода - как обычно, чтобы решить этот сценарий - и фактический код, следующий за новым " Парадигма «Управление состоянием», которая терпит неудачу, я не могу себе представить, как этот вопрос может быть более понятным.
Это не вопрос «orthographi c» или «ошибка компилятора», поэтому мне нужно задать больше "философским" образом.
Мне нужно опубликовать новую корзину и получить идентификатор из API перед добавлением элементов.
Но публикация в качестве побочного действия через Управление состоянием (NGXS) Я не могу знать, когда будет выполнен асин c объект.
Есть ли способ поместить код, который должен быть выполнен, когда завершена запись экземпляра "master" ? Как мы можем решить это на NGXS?