Rx java 单个.fromObservable()的行为

Rx java 单个.fromObservable()的行为,rx-java,observable,rx-java2,Rx Java,Observable,Rx Java2,Single.fromObservable()的文档说“如果源Observable有多个元素,则会发出IndexOutOfBoundsException的信号。”但如果在收到Observable的第一个元素后立即处理订阅,则永远不会发生这种情况。单个必须维持订阅,直到它收到onNext()[导致索引自动边界异常],onComplete()[可能导致它从可观察的]取消订阅,或者一个错误[可能传递到下游] 该操作员如何以及何时处理从源可观察的取消订阅?文档是否正确?是的,文档是否正确。如果您有疑问,

Single.fromObservable()
的文档说“如果源
Observable
有多个元素,则会发出
IndexOutOfBoundsException
的信号。”但如果在收到
Observable
的第一个元素后立即处理订阅,则永远不会发生这种情况。
单个
必须维持订阅,直到它收到
onNext()
[导致
索引自动边界异常
],
onComplete()
[可能导致它从
可观察的
]取消订阅,或者
一个错误
[可能传递到下游]


该操作员如何以及何时处理从源
可观察的
取消订阅?文档是否正确?

是的,文档是否正确。如果您有疑问,请检查:

public void onNext(T){
如果(完成){
返回;
}
if(值!=null){
完成=正确;
s、 处置();
onError(新的IllegalArgumentException(“序列包含多个元素!”);
返回;
}
值=t;
}
但是,如果订阅在收到(并重新发射)可观测的第一个元素后立即被处理,则这种情况永远不会发生

操作员不会在第一次排放后进行处理,而只会在第二项排放后进行处理,这会产生
索引AutofBoundsException

之后,用于发出单个项(或默认项)的
onComplete

@覆盖
未完成的公共空间(){
如果(完成){
返回;
}
完成=正确;
tV=数值;
值=空;
如果(v==null){
v=默认值;
}
如果(v!=null){
实际成功率(v);
}否则{
actual.onError(新的NoSuchElementException());
}
}