Событие, управляемое Angular для управления состоянием NGXS - PullRequest
0 голосов
/ 11 марта 2020

Что ж, как программист старой школы, мы закончили с некоторыми рецептами, которые на самом деле были успешными в повседневных вопросах. Одним из них является создание «основной записи» (если она не существует) и сохранение ее в 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?

...