1
我是很新,反應式編程,並有這樣的方法,它不會編譯,我無法得到它的權利,嵌套壓縮的造成的可觀回報價值錯配
public Observable<Data> findData(long templateId) {
..
..
return Observable.zip(templateObs, dataObs, (templateObj, dataObj) -> {
try {
switch(model) {
case SINGLE: {
..
..
return new Data();
}
case TOURNAMENT: {
// compilation error on the entire .zip block :
// Type mismatch: cannot convert from Observable<Object> to Observable<Data>
return Observable.zip(obs1, obs2, obs3, obs4, (data, data2, data3, data4) -> {
..
..
return new Data(data1,data2,data3,data4);
}).flatMap(results -> results);
}
}
}catch(DataException e) {
log.error(e);
}
return null;
});
}
出於某種原因,內部返回.zip返回Observable而不是Observable - 這會導致編譯錯誤...
如果我從內部.zip中刪除'return',那麼它會編譯。
通過使用.toBlocking方法它會影響我的異步流程或像阻塞線程的原因和性能問題? – Shvalb 2015-04-03 13:59:03
yeap。因爲它被命名爲'toBlocking'塊。當你評論時,你可以嘗試第二個解決方案,它將返回'Observable '而不是'Data'。 – dwursteisen 2015-04-03 14:15:20
我必須返回數據...也許我可以.flatMap結果莫名其妙.. – Shvalb 2015-04-03 14:37:03