извините за подоконник вопрос.У меня есть требование, когда пользователь должен выполнить 6 шагов, чтобы выполнить 1 действие.Если пользователь нажимает на URL шага 6, то сначала я должен проверить, закончили ли они предыдущие 5 шагов.Если нет, то я должен указать, какие шаги пользователь выполнил, а какие ожидают.Для ожидающего я также добавляю URL, чтобы пользователь мог легко перенаправить.
Проблема в том, что я повторяю каждый шаг, но из-за NG RX он не ждет завершения действия и перехода к следующемушаг.Я не могу определить, действительно ли предыдущие шаги завершены или нет.
Я использую технологии NG RX Action, Reducer и Effect.В любом случае я могу подождать цикл для завершения первого действия.После того, как первое действие выполнено, а затем возьмите второй элемент из массива.
// This is part of code in effect file.
const steps = [Step.Step1, Step.Step2, Step.Step3]
// It should take next element once evaluation of step1 is completed.
steps.every((currentStep: Step) => {
currentDependentStep = currentStep;
switch (currentStep) {
case Step.Step1:
this.store.dispatch(new fromSomeAction.SomeAction1);
this.store.dispatch(new fromSomeAction.SomeAction2);
this.store.combineLatest(
this.store.select(fromApp.getData1),
this.store.select(fromApp.getData2)
).first(([payload, data1, data2]) => !!data1 && !!data2)
.subscribe(([payload, data1, data2]) => {
// It should not take second element till I get below result whethere it is completed or not.
isCompleted = <check for some condition>;
});
break;
case Step.Step2:
this.store.dispatch(new fromSomeAction.SomeAction1);
this.store.dispatch(new fromSomeAction.SomeAction2);
this.store.combineLatest(
this.store.select(fromApp.getData1),
this.store.select(fromApp.getData2)
).first(([payload, data1, data2]) => !!data1 && !!data2)
.subscribe(([payload, data1, data2]) => {
isCompleted = <check for some condition>;
});
break;
case Step.Step3:
this.store.dispatch(new fromSomeAction.SomeAction1);
this.store.dispatch(new fromSomeAction.SomeAction2);
this.store.combineLatest(
this.store.select(fromApp.getData1),
this.store.select(fromApp.getData2)
).first(([payload, data1, data2]) => !!data1 && !!data2)
.subscribe(([payload, data1, data2]) => {
isCompleted = <check for some condition>;
});
break;
break;
default:
isCompleted = false;
break;
}
return !isCompleted;
});
// Call completed action with payload based on isCompleted
Примечание: Извините, у меня нет фактического кода для обмена здесь.