我有一个RxJava流,它一次遍历一个表中的所有记录,为每个记录中的每个收件人发送一封电子邮件,并存储发送是否成功的状态。重复此循环,直到从数据库中读取了所有收件人并将消息发送给他们为止。我遇到的问题是,从流的开始(从getMessagesToSend开始)到storeMessageSent的代码对于每个收件人(第一个收件人除外)都会被调用两次:
val msgToSendPublisher = BehaviorSubject.createDefault(0)
msgToSendPublisher.flatMap { startPos -> App.context.repository.getMessageToSend() }
.flatMap { messageToSend ->
App.context.repository.sendMessage(messageToSend)
.doOnError {
messageToSend.failureSending = true
}.doOnNext { Observable.just(messageToSend) }
}
.zipWith( // 1 second delay between emissions.
Observable.interval(1, TimeUnit.SECONDS),
BiFunction { item: MessageToSend, _: Long -> item })
.flatMap { messageToSend ->
App.context.repository.storeMessageSent(messageToSend)
.doOnError {
messageToSend.failureSending = true
}.doOnNext { Observable.just(messageToSend) }
}
.doOnNext { messageToSend ->
msgToSendPublisher.onNext(0)
}
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(
{ messageToSend ->
},
{ ex ->
if (ex is EmptyResultSetException) {
} else {
}
},
{
// Complete
}
)
}
我的信息流显然存在问题。仅当调用msgToSendPublisher.onNext(0)时,流才应前进到下一条记录。
是什么导致流对每个记录重复两次?