Single.fromObservable()
的文档说“如果来源Observable
有多个元素,则会发出IndexOutOfBoundsException
信号。”但是,如果在收到(并重新发射)Observable
的第一个元素后立即处理订阅,则永远不会发生这种情况。 Single
必须维持订阅,直到收到onNext()
[导致IndexOutOfBoundsException
],onComplete()
[可能导致其取消订阅Observable
] ,或onError
[推测通过下游]。
此运算符如何以及何时处理来自源Observable
的取消订阅?文件是否正确?
答案 0 :(得分:1)
是的,文档是正确的。如果您有疑问,请查看source code:
public void onNext(T t) {
if (done) {
return;
}
if (value != null) {
done = true;
s.dispose();
actual.onError(new IllegalArgumentException("Sequence contains more than one element!"));
return;
}
value = t;
}
但是,如果在收到(并重新发射)Observable的第一个元素后立即处理订阅,这种情况永远不会发生。
操作员不会在第一次发射后处理,而是仅在第二项之后处置,产生IndexOutOfBoundsException
。
之后,onComplete
is responsible用于发出单个项目(或默认项目):
@Override
public void onComplete() {
if (done) {
return;
}
done = true;
T v = value;
value = null;
if (v == null) {
v = defaultValue;
}
if (v != null) {
actual.onSuccess(v);
} else {
actual.onError(new NoSuchElementException());
}
}