有没有办法在执行下一行代码之前等待商店调度在 ngrx 中完成?
Is there a way to wait for the store dispatch to complete in ngrx prior to executing next line of code?
我想等待 ngrx 中商店的调度完成。然后,我想执行同步调用的下一行语句。
我试过如下,效果如预期。问题是 delay(2500) 并不是所有的准确时间。有时可能需要或多或少的时间来完成商店调度代码行。有没有更好的方法来处理它以便在 this.store.dispatch... 完成后执行 return of(false) 语句?
validateRules(isCompleteActivity : boolean) {
this.isSubmitProgress = true;
this.transmitSubscription = this.menuService.getRules(this.parameters,
statusTypeOptions.Error).pipe(
switchMap(x => {
if (x.ruleOutput.length > 0) {
return of(false);
} else {
return this.saveService.saveToGrid(null, null).pipe(
switchMap(successful=> {
if (successful) {
if (this.center == '002' && (this.activity == 'AAA' || this.activity == 'BBB')) {
this.store.dispatch(new fromActions.LoadDetails(this.parameters,
isCompleteActivity));
delay(2500);
return of(false);
}
else {
return this.flowService.completeAction();
}
}
return of(false);
})
);
}
})
).subscribe(isSuccess => {
this.isSubmitProgress = false;
if (isSuccess) {
this.bridgeService.closeWindow();
}
},
error => {
this.isSubmitProgress = false;
}
)
}
我在上面的问题中卡了几天,不知道如何才能摆脱它。非常感谢您的帮助。再次感谢!
你看过效果了吗?
使用 effects 你可以得到分派的动作,并在它们被减速器应用后做一些事情。我会建议重新编写代码以仅调度操作,并根据原始调度的结果实现一个效果来处理下一步的操作。
我想等待 ngrx 中商店的调度完成。然后,我想执行同步调用的下一行语句。
我试过如下,效果如预期。问题是 delay(2500) 并不是所有的准确时间。有时可能需要或多或少的时间来完成商店调度代码行。有没有更好的方法来处理它以便在 this.store.dispatch... 完成后执行 return of(false) 语句?
validateRules(isCompleteActivity : boolean) {
this.isSubmitProgress = true;
this.transmitSubscription = this.menuService.getRules(this.parameters,
statusTypeOptions.Error).pipe(
switchMap(x => {
if (x.ruleOutput.length > 0) {
return of(false);
} else {
return this.saveService.saveToGrid(null, null).pipe(
switchMap(successful=> {
if (successful) {
if (this.center == '002' && (this.activity == 'AAA' || this.activity == 'BBB')) {
this.store.dispatch(new fromActions.LoadDetails(this.parameters,
isCompleteActivity));
delay(2500);
return of(false);
}
else {
return this.flowService.completeAction();
}
}
return of(false);
})
);
}
})
).subscribe(isSuccess => {
this.isSubmitProgress = false;
if (isSuccess) {
this.bridgeService.closeWindow();
}
},
error => {
this.isSubmitProgress = false;
}
)
}
我在上面的问题中卡了几天,不知道如何才能摆脱它。非常感谢您的帮助。再次感谢!
你看过效果了吗?
使用 effects 你可以得到分派的动作,并在它们被减速器应用后做一些事情。我会建议重新编写代码以仅调度操作,并根据原始调度的结果实现一个效果来处理下一步的操作。