RxJava流对从数据库中检索到的每个记录重复两次

时间:2019-07-09 08:13:37

标签: android kotlin rx-java

我有一个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)时,流才应前进到下一条记录。

是什么导致流对每个记录重复两次?

0 个答案:

没有答案