我有以下同步代码,希望将它们建模为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中建模。任何帮助表示赞赏。
答案 0 :(得分:2)
首先,对不起我的英语不好。
我编辑了整个答案,因为我没有听清他的问题是什么。
我不知道您的Action类的handle函数如何实现,但是此函数的返回值应更改为RxJava2的异步类。在这种情况下,可以上课。
- 您想要如何实现异步递归。
- 句柄列表或为空。
如果要处理某些内容,请使用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的关键。