我正在尝试使用RxSwift创建聊天服务链。 基本上它应该做的:RxSwift - 当observable发生变化但只发出最后一个值时如何重试?
- 检查聊天有ID,如果是去下一个,如果没有flatMap到createChat服务
- 检查sockect连接已启用
- 发送聊天消息
基本上下面的函数工作,但它现在不检查套接字连接状态。 它应该在第二个flatMap之前检查套接字是否连接,如果是,则应该使用messageUpload进行flatMap,如果不是,则应该等到连接返回true为止。 我有变量,告诉我关于当前连接状态(布尔)
chatSocketService.isSubscribedToChannel.asObservable()
,但我无法弄清楚如何把它们放在一起。 我试着用第三个flatMap(在当前的最后一个之前)它不起作用。 接下来的问题是用户可以在连接返回前尝试发送很少的消息,所以每次他点击sendButton时,都会执行此方法,所以当连接返回时,它只应发送最后一条消息。 任何想法我可以如何处理与Rx?
func sendMessage(withBody body: String) {
guard !body.isEmpty else { return }
Observable.just(chatModel.value)
.filter({ $0.product != nil })
.flatMap({ [unowned self] chatModel -> Observable<ChatModel> in
if chatModel.id != nil {
return Observable.just(chatModel)
} else {
return self.createChat(withProductModel: chatModel.product!)
}
})
.flatMap({ [unowned self] chatModel -> Observable<ChatMessageModel> in
return self.chatService.uploadChatMessage(forChat: chatModel, withBody: body)
.trackActivity(self.progressHelper.activityIndicator)
})
.subscribe(onNext: { [unowned self] chatMessageModel in
self.finishedSendingMessage.onNext(())
})
.addDisposableTo(disposeBag)
}
太棒了!这正是我所期待的! 谢谢Tomahh –