避免RxJava中的toblock
为了简洁起见,我发现下面的代码进行了修改,这是有缺陷的,据我所知,它有缺陷 它使用toblock,这在一般情况下是不推荐的,并且已经在被动上下文中使用 它返回单个;因此,一旦它从流中获得单个项,它就会终止它,忽略不需要的其余项。 虽然我相信我可以解决这个问题,但把单曲移到最后?有人能解释一下,我怎样才能取消Toblock的使用避免RxJava中的toblock,java,rx-java,observable,Java,Rx Java,Observable,为了简洁起见,我发现下面的代码进行了修改,这是有缺陷的,据我所知,它有缺陷 它使用toblock,这在一般情况下是不推荐的,并且已经在被动上下文中使用 它返回单个;因此,一旦它从流中获得单个项,它就会终止它,忽略不需要的其余项。 虽然我相信我可以解决这个问题,但把单曲移到最后?有人能解释一下,我怎样才能取消Toblock的使用 您可以使用flatMap或concatMap替换map+ToBlock: 每当你想使用map+Toblock时,你都需要flatMap。也可以用from替换+flatMa
您可以使用flatMap或concatMap替换map+ToBlock:
每当你想使用map+Toblock时,你都需要flatMap。也可以用from替换+flatMapfrom。谢谢,我相信我的思路是正确的,但我的问题是当我用.flatMapresp->{return resp}替换map+toblock时;我得到编译错误。在某个地方我犯了一个幼稚的错误,你能解释一下这没有任何影响吗:?代码不会处理任何错误,而且它会创建一个可观察对象并立即将其丢弃。
observableList.map(incentiveDetailsList -> {
List<SomeObject> list = mapThisList(incentiveDetailsList);
return Observable.just(list)
.flatMap(Observable::from)
.flatMap(item -> {
Request request = createRequest(item);
String accountNumber = item.getAccountNumber();
return serviceThatReturnsObservable.load(request)
.doOnError(onError -> {
Observable.error(new Exception("some context"));
})
.map(response -> {
handleError(response);
return responseMap.put(accountNumber, buildResponse(response.getResponse()));
});
})
.map(resp -> mapResponse(store, incentiveDetailsList, responseMap))
.toBlocking()
.single();
})
observableList.flatMap(incentiveDetailsList -> {
List<SomeObject> list = mapThisList(incentiveDetailsList);
return Observable.from(list)
.flatMap(item -> {
Request request = createRequest(item);
String accountNumber = item.getAccountNumber();
return serviceThatReturnsObservable.load(request)
/* this has no effect:
.doOnError(onError -> {
Observable.error(new Exception("some context"));
})
*/
.map(response -> {
handleError(response);
return responseMap.put(accountNumber,
buildResponse(response.getResponse()));
});
})
.map(resp -> mapResponse(store, incentiveDetailsList, responseMap));
})