一、描述
这个操作符将Observable转换为一个返回单个数据项的Future。
toFuture操作符也是只能用于BlockingObservable。这个操作符将Observable转换为一个返回单个数据项的Future,如果原始Observable发射多个数据项,Future会收到一个IllegalArgumentException;如果原始Observable没有发射任何数据,Future会收到一个NoSuchElementException。
如果你想将发射多个数据项的Observable转换为Future,可以这样用:myObservable.toList().toBlocking().toFuture()。
二、示意图
三、示例代码
1 | Future future = Observable.just(1).toBlocking().toFuture(); |
四、运行结果
1 | Data: 1 |
五、更多
1. 发射多个数据项(异常处理)
1 | Future future = Observable.just(1, 2, 3, 4, 5).toBlocking().toFuture(); |
运行结果1
Error: java.lang.IllegalArgumentException: Sequence contains too many elements
可见当原始Observable发射多个数据项,Future会收到一个IllegalArgumentException。
2. 发射多个数据项(正确处理)
如果你想将发射多个数据项的Observable转换为Future,可以这样用:myObservable.toList().toBlocking().toFuture()。
1 | Future future = Observable.just(1, 2, 3, 4, 5).toList().toBlocking().toFuture(); |
运行结果1
Data: [1, 2, 3, 4, 5]
3. 不发射任何数据
1 | Future future = Observable.empty().toBlocking().toFuture(); |
运行结果1
Error: java.util.NoSuchElementException: Sequence contains no elements
可见原始Observable没有发射任何数据,Future会收到一个NoSuchElementException。
六、参考资料
PS:欢迎关注 SherlockShi 个人博客