Я использую NGRX и эффекты для базовых вещей в приложении.Приложение поддерживает связь Bluetooth и постоянно обновляет / записывает различные параметры.Однако иногда необходимо приостановить это обновление.
У меня возникают проблемы с приостановкой выполнения эффекта NGRX, который использует concatMap для помещения действий в последовательную очередь.Действия в очереди все еще должны обрабатываться после того, как был подан какой-то сигнал «продолжить», или когда свойство bluetoothService.paused снова становится ложным.Может быть много действий ReadFromDevice, помещенных в очередь в concatMap.
Служба bluetooth имеет логическое свойство this.bluetoothService.pauseCommunication, однако я не знаю, как интегрировать это в Effect.Я пробовал разные (возможно глупые) вещи, но до сих пор не получилось.К сожалению, в настоящее время я не могу изменить код bluetoothService.
Я знаю, что могу отменить полный concatMap, выдав ошибку, но это не то, что мне нужно.Мне просто нужно приостановить обработку, пока логический флаг не станет ложным.
Это упрощенный пример эффекта, который я использую
@Effect()
readParameterFromDevice$: Observable<Action> = this.actions$.pipe(
ofType<ReadFromDevice>(CommunicationActionTypes.ReadFromDevice),
map(action => action.payload),
concatMap(async request => {
try {
const result = await this.bluetoothService.readFromDevice(
request
);
return new ReadSuccess({
result
});
} catch (error) {
return new ReadError({
result
});
}
})
);
Было бы здорово, если бы кто-нибудь мог указать мне на правонаправление.