2017-04-05 63 views
0

我是RxJava的新手,我有一個當前使用Spring異步的項目,試圖將它重構爲RxJava的方式,不知道什麼是優雅的方式。重構Spring異步到RxJava的方式

我們有一個類UserService,然後執行繁重的工作

@Async 
public class UserService { 
    public Future<User> fetchUsers(String space, String username) { 
    // some other thing 
    ... 

    // call network APIs to fetch users for a space 
    return new AsyncResult<>(clientOf.fetechUsers(space, username)); 
    } 
} 

在來電者:

List<Future<User>> users = new ArrayList<>(); 
String username = "alice"; 
for(String space : Arrays.asList("SPACE1", "SPACE2")) { 
    users.add(userService.fetchUsers(space, username)); 
} 

List<User> resultUsers = new ArrayList<>(); 
for(Future<User> user: users) { 
    resultUsers.add(user.get()); 
} 
return resultUsers; 

在來電,我們要調用userService兩個並聯空間,然後合併結果,我應該如何用RxJava完成它?我看到了Tread的一些例子,我必須自己管理Tread嗎?還是有一種完美的方式來完成工作?

回答

0

閱讀更我發現與RxJava 2,我意識到,我可以做這樣的事情:

Observable.just("SPACE1", "SPACE2") 
      .observeOn(Schedulers.io()) 
      .map(space -> userService.fetchUsers(space, username)) 
      .blockingSubscribe(System.out::println);