![](/img/trans.png)
[英]RxJava 2: Observable.create() wait until async code is finished using Thread.sleep()
[英]Keep main thread wait until RxJava Observable complete
我想保留我的主線程,直到RxJava 2 Observable完成。 我的編碼如下。 情況是當我請求該方法包含以下代碼時,該方法只是在執行而無需等待可觀察的
Observable
.fromArray(observableList)
.subscribeOn(Schedulers.io())
.subscribe(new Consumer<List<Observable<List<String>>>>() {
@Override
public void accept(List<Observable<List<String>>> list) throws Exception {
for (Observable<List<String>> observable : list) {
System.out.println("Thread name " + Thread.currentThread().getName());
observable.subscribe(new Consumer<List<String>>() {
@Override
public void accept(List<String> t) throws Exception {
Gson jsonBuilder = new Gson();
Object obj = new Object();
JsonElement element = jsonBuilder.toJsonTree(obj);
element.getAsJsonObject().addProperty(t.get(0), t.get(1));
Gson g = new Gson();
Object out = g.fromJson(t.get(1), Object.class);
microResponses.put(t.get(0), out);
}
});
}
}
});
請使用以下任一選項:-1.刪除subscribeOn 2.使用Thread.sleep保留足夠大的時間來完成任務3. Google toBlocking rxjava中的用法
您不需要多級訂閱,也不需要嵌套Observable:
Oservable
.fromArray(observableList)
.flatMapIterale(i -> i)
.flatMap(i -> i)
.doOnNext(t -> {
Gson jsonBuilder = new Gson();
Object obj = new Object();
JsonElement element = jsonBuilder.toJsonTree(obj);
element.getAsJsonObject().addProperty(t.get(0), t.get(1));
Gson g = new Gson();
Object out = g.fromJson(t.get(1), Object.class);
microResponses.put(t.get(0), out);
})
// .subscribe(...) or .doOnComplete(...).subscribe();
;
但是,您編寫的代碼有幾個問題:
new JsonObject()
? Object out = g.fromJson(t.get(1), Object.class);
除了一個空的JsonObjecy之外,它不會產生任何其他東西,因為Object
沒有任何屬性。 Map.Entry<String,Object>
甚至Pair<String, Object>
?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.