-1

我正在尝试在concatMap内部实现,RxSwift但是当我尝试为内部的可观察对象设置一个新值时,concatMap我收到了这个错误:

Reentrancy anomaly was detected.
  > Debugging: To debug this issue you can set a breakpoint in /Users/SuperUser/repos/RxObserver/Pods/RxSwift/RxSwift/Rx.swift:96 and observe the call stack.
  > Problem: This behavior is breaking the observable sequence grammar. `next (error | completed)?`
    This behavior breaks the grammar because there is overlapping between sequence events.
    Observable sequence is trying to send an event before sending of previous event has finished.
  > Interpretation: This could mean that there is some kind of unexpected cyclic dependency in your code,
    or that the system is not behaving in the expected way.
  > Remedy: If this is the expected behavior this message can be suppressed by adding `.observeOn(MainScheduler.asyncInstance)`
    or by enqueuing sequence events in some other way.

这是我的代码:

public let myNumbers = BehaviorRelay<String>(value: "")

override func viewDidLoad() {
    super.viewDidLoad()
    processNumbers()
    myNumbers.accept("one")
    myNumbers.accept("two")
}

func processNumbers() {
    Observable.of(myNumbers).concatMap{ $0
    }.subscribe(onNext:{
        print($0)
        if $0 == "one" || $0 == "two"{
            self.myNumbers.accept("YEAH!")
        }
        }).disposed(by: disposeBag)

}

你们中的任何人都知道我为什么会收到此错误或如何更改我的实现以避免收到此错误/警告?

我会非常感谢你的帮助。

4

2 回答 2

1

你们中的任何人都知道为什么我可能会收到此错误吗?

  > Problem: This behavior is breaking the observable sequence grammar. `next (error | completed)?`
    This behavior breaks the grammar because there is overlapping between sequence events.
    Observable sequence is trying to send an event before sending of previous event has finished.

如何更改我的实现以避免出现此错误/警告?

  > Remedy: If this is the expected behavior this message can be suppressed by adding `.observeOn(MainScheduler.asyncInstance)`
    or by enqueuing sequence events in some other way.
于 2019-12-07T21:13:17.057 回答
-1

我找到了解决此问题的方法:

func processNumbers() {
        Observable.of(myNumbers).concatMap{ $0
        }
        .observeOn(MainScheduler.asyncInstance)
        .subscribe(onNext:{
            print($0)
            if $0 == "one" || $0 == "two"{
                self.myNumbers.accept("YEAH!")
            }
            }).disposed(by: disposeBag)

    }

通过添加这行代码.observeOn(MainScheduler.asyncInstance),错误/警告消失了!!

于 2019-12-07T22:59:39.147 回答