为啥 withLatestFrom 不返回最新值?

Posted

技术标签:

【中文标题】为啥 withLatestFrom 不返回最新值?【英文标题】:Why withLatestFrom don't return latest value?为什么 withLatestFrom 不返回最新值? 【发布时间】:2019-01-17 00:35:34 【问题描述】:

我使用一些BehaviourRelay 来表示一些变量。我使用withLatestFrom 作为其中之一。但是withLatestFrom 没有返回我绑定的最新值。

如果我使用combineLatest。它有效,但我想知道为什么 withLatestFrom 的代码不起作用

let dueDate = BehaviorRelay<Date?>(value: nil)
let numberScheduleDays = BehaviorRelay<Int>(value: 1)
let selectedPaymentDate = BehaviorRelay<Date?>(value: nil)

dueDate.asObservable()
    .distinctUntilChanged()
    .flatMap  Observable.from(optional: $0) 
    .map  self.addDaysForDate(days: 1, date: $0) 
    .bind(to: selectedPaymentDate)
    .disposed(by: disposeBag)

selectedPaymentDate.asObservable()
    .distinctUntilChanged()
    .withLatestFrom(dueDate.asObservable())  (selectedDate: $0, dueDate: $1) 
    .map  self.daysBetweenDates(startDate: $0.dueDate, endDate: $0.selectedDate) 
    .bind(to: numberScheduleDays)
    .disposed(by: disposeBag)

dueDate.accept(Date())

在第一块selectedPaymentDate.value = Date() + 1之后 但在第二块 dueDate 仍然发出 nil 值。不知道为什么它的值不是Date()

【问题讨论】:

【参考方案1】:

withLatestFrom 假设两个可观察序列具有不同的来源,并且它们不会同时触发(就像您的情况一样,它们具有相同的来源)。

如果两个可观察序列同时触发,则可以使用单个序列来解决它们。

更多信息请阅读:

withLatestFrom doesn't actually provide latest value

【讨论】:

以上是关于为啥 withLatestFrom 不返回最新值?的主要内容,如果未能解决你的问题,请参考以下文章

RxSwift 简单 withLatestFrom 不触发

angular技巧

RxJs操作符,其行为类似于withLatestFrom,但会等待第二个流的值。

将参数传递给 withLatestFrom 函数

为啥查询不返回值?

为啥 main() 函数不返回浮点值?