У меня есть функция, которая отменяет запущенный процесс с некоторыми processId
.Существует только один if оператор , перед которым проверяется, есть ли у вас processId
, и если да, то он вызывает cancel()
.
if (this.processId) {
//...
this.processEngine.cancel(this.processId, this.entityUid).subscribe(
...
);
} else {
console.log('No active process to cancel');
}
. При запуске процесса отображается экран загрузки.с анимацией загрузки и кнопкой Cancel .Теперь существует проблема, заключающаяся в том, что в течение очень короткого момента (в основном при регулировании с помощью инструментов dev) пользователь может нажать Cancel , и processId
еще не был инициализирован, и, таким образом, процесс запуска не отменен.
В службе есть Subject
, для которого установлено значение processId
при успешном запуске процесса и его немедленном завершении после этого.
private startSubject = new Subject<string | null>();
...
// inside start function
this.startSubject.next(processId);
this.startSubject.complete();
Существует также BehaviorSubject
, который имеет значение true, когда проект запущен и работает.
active: BehaviorSubject<boolean> = new BehaviorSubject(false);
Я расширил оператор if с помощью this.active.value
, но я не могу понять, как отложить отмену вызова, пока startSubject
не будет завершено.Я попытался использовать его в debounce, но он не работает должным образом, и метод отмены вызывается с undefined
, что приводит к ошибке.
this.processEngine.cancel(this.processId, this.entityUid).pipe(
debounce(() =>
return this.startSubject.asObservable()
)
)
.subscribe(...);