特征的 flatMap writeValue 不返回 Observable
Posted
技术标签:
【中文标题】特征的 flatMap writeValue 不返回 Observable【英文标题】:flatMap writeValue for characteristic do not return Observable 【发布时间】:2017-06-05 14:48:37 【问题描述】:更新:我刚刚检查了他们的示例项目,它是一样的。所以,这可能是一个错误,或者这是预期的行为。
我正在使用 RxBluetoothKit,但无法解决以下问题。我有这个包装函数来编写一个特性(我正在尝试用 concat 编写其中的许多特性,效果很好):
func writeCharacteristicData(for peripheral: Peripheral, characteristicIdentifier: CharacteristicIdentifier, value: Data?) -> Observable<Characteristic>
guard let value = value else
return Observable.error(BTError.noDataProvided(description: "Missing value for: \(characteristicIdentifier)"))
return peripheral
.connect()
.flatMap $0.writeValue(value,
for: characteristicIdentifier,
type: .withResponse)
根据 RxBluetoothKit 文档.flatMap $0.writeValue
是写入特性的最简单方法之一。实际上它与readValue
一起工作得很好,即使使用这个writeValue
,写入也是成功的,如果我之后用readValue 读回它,characteristic.value
在oNext:
中是可以的。
我的问题是这个函数返回一个Observable<Characteristic>
,我的假设是它会给我写回的值。但事实并非如此,或者至少它对我不起作用。它给了我以前的值或零,到目前为止我无法弄清楚发出的Observable<Characteristic>
的逻辑是什么。如果我能取回书面价值,那就太好了。我做错了什么?
我什至尝试了更长的方法,在 github 上提到了这个:
characteristic.writeValue(data, type: .withResponse)
.subscribe event in
//respond to errors / successful read
发出的特性(在onNext:
回调中)不是我写给设备的特性。这是以前的一个或零。有趣的是,如果我尝试读回它,然后再写,character.value 将是我用$0.readValue
读过的那个。但是如果我重新编译,写一个全新的,它仍然是我以前读过的一样。这就像 RxBluetoothKit 缓存了一个值,或者我根本不知道。
这可能是 ble 设备的问题吗? 也许这是一个线程问题或类似的东西?
非常感谢任何建议或提示。
谢谢,
丹尼尔
【问题讨论】:
【参考方案1】:很抱歉没有回复,我刚刚注意到这一点。你的问题还出现吗?如果是这样 - 请在我们的 Github 上写一个问题。它与 Core Bluetooth 本身的工作方式有关,我们可能应该改进我们的文档,所以最好将它作为一个问题。您应该做的是再次读取该值 - 然后它将显示正确的值。
【讨论】:
以上是关于特征的 flatMap writeValue 不返回 Observable的主要内容,如果未能解决你的问题,请参考以下文章
为啥在 Angular 中实现 ControlValueAccessor 时需要在 writeValue 中调用 onChange 和 onTouch?