Требуется, чтобы наблюдаемое для подключения к тайм-ауту, а не для наложения таймаута на всю цепочку
// ...
.take(1)
.flatMap { _ in
self.manager!.retrievePeripherals(withIdentifiers: [peripheralUUID])[0]
.establishConnection()
.timeout(5.0, scheduler: MainScheduler.instance)
.take(1)
}
.flatMap{ $0.writeValue(data, for: BLECharacteristic.char, type: .withResponse) }
// ...
Добавление .take(1)
гарантирует, что наблюдаемое завершается после установления соединения (хотяв идеальном мире, establishConnection()
должен быть ответственным за это поведение).