如何将异步承诺代码转换为rxjava

时间:2018-09-19 00:16:28

标签: java android promise rxjs rx-java2

我有以下同步代码,希望将它们建模为RXJava中的异步代码。

void executeActions(List<Action> action) {
  if (action == null || action.size() == 0) return;
  for (Action action: actions) { 
     executeActions(action.handle());
  } 
}


class Action {

   //implementation of handle 
   // return List<Action> or null. 
   List<Action> handle() {
   } 
} 

现在,在JS中,我可以像这样用Promises对此交互进行建模。 (下面的伪代码-我的JS很弱)

executeActionsAsync(actions) { 
  var p = Promise.resolve(); 
  action.forEach(function(action) { 
    p = p.then(function() { 
           action.handle();    
        })
  } 
  return p; 
} 


class Action() { 
  function handle() { 
    actions = [];// some array of actions. 
    executeAsync(actions);
  } 
} 

我想在RXJava2中建模。任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:2)

首先,对不起我的英语不好。

我编辑了整个答案,因为我没有听清他的问题是什么。

我不知道您的Action类的handle函数如何实现,但是此函数的返回值应更改为RxJava2的异步类。在这种情况下,可以上课。

  
      
  1. 您想要如何实现异步递归。
  2.   
  3. 句柄列表或为空。
  4.   

如果要处理某些内容,请使用Maybe,否则请使用null。在RxJava2中

class Action {
  Maybe<List<Action>> handle() {}
}

这是Action类的句柄返回的内容。

void executeActions(Maybe<List<Action>> rxactions) {
  // add null check.
  // List<Action> handles as stream, but you can use for or iterator or whatever you want.
  rxactions.subscribe(actions -> actions.stream().map(action -> executeActions(action.handle())));
}

重要的是,handle()函数正确返回。

  

其他

在RxJava2中,有多个类可以处理异步。 单一,可流动,可观察,可完成。每个类的实例方法都订阅。

简单地说

1.Single =>返回单个类。

2.Flowable,Observable =>返回多个类。 (Flowable比Observable复杂,这增加了背压。)

3.Completable =>不返回任何内容,无论成功与否。

4。也许是返回*或null。

5.subscribe正在执行此异步操作。

::每个类都可以轻松转换。

::解决问题的方法有很多。因此仅供参考。

ex) Single<List<Foo>> <=> Flowable<Foo> // This is not same. but treat as similar.
  

PS。

我也有这种经历。我认为您需要了解有关RxJava2的更多信息,以便在任何地方正确使用。

承诺可以分为单个,可流动,可观察,可完成。如上所述。这是开始了解RxJava2的关键。