 
         let disposable = observable.subscribe(
             onNext: { [weak self] characteristic in
-                self?.dispatchEvent(BleEvent.readEvent, value: [NSNull(), characteristic.asJSObject, transactionId])
+                if self?.pendingReads[characteristic.jsIdentifier] ?? 0 == 0 {
+                    self?.dispatchEvent(BleEvent.readEvent, value: [NSNull(), characteristic.asJSObject, transactionId])
+                }
             }, onError: { [weak self] error in
                 self?.dispatchEvent(BleEvent.readEvent, value: [error.bleError.toJS, NSNull(), transactionId])
             }, onCompleted: {

                onDisposed: { [weak self] in
                    self?.transactions.removeDisposable(transactionId)
                    BleError.cancelled().callReject(promise)
                }
            )



    // Disposable map for every transaction.
    private let transactions = DisposableMap<String>()

    // Map of pending read operations.
    private var pendingReads = Dictionary<Double, Int>()

    // MARK: Lifecycle -------------------------------------------------------------------------------------------------

