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



我有以下同步代码,我想在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中,我可以像这样用承诺来建模这种交互。 (下面的伪代码 - 我的 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 中建模。任何帮助,不胜感激。

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

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

我不知道您的 Action 类的句柄函数是如何实现的,但是这个函数的返回值应该更改为 RxJava2 的异步类。在这种情况下,也许是类。

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

如果要处理某些内容,请使用 也许,或者在 RxJava2 中使用 null。

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.单 => 返回单类。

2.可流动,可观察 => 返回多个类。(可流动比可观察更复杂,后者增加了背压。

3.可运算 => 什么都不返回,成功与否。

4.也许是返回 * 或空。

5.订阅是执行此异步。

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

:: 有很多方法可以解决一个问题。 所以它只是参考。

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

附言。

我也有过这样的经历。我认为您需要了解有关RxJava2的更多信息才能在任何地方正确使用。

承诺可以分为单一的、可流动的、可观察的、可遵守的。如上所述。这是开始理解RxJava2的关键。

最新更新