rOr*_*lig 8 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() {
}
}
Run Code Online (Sandbox Code Playgroud)
现在在JS中,我可以像Prom这样建模这种与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);
}
}
Run Code Online (Sandbox Code Playgroud)
我想在RXJava2中对其进行建模.任何帮助表示赞赏.
首先,抱歉我的英语不好。
我编辑了整个答案,因为我没有明白他的问题是什么。
我不知道如何实现你的 Action 类的句柄函数,但是这个函数的返回值应该更改为 RxJava2 的异步类。在这种情况下,也许类。
- 您想知道如何实现异步递归。
- 处理列表或为空。
如果你想处理某些东西或 null,请使用 Maybe。在 RxJava2 中
class Action {
Maybe<List<Action>> handle() {}
}
Run Code Online (Sandbox Code Playgroud)
这是您的 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())));
}
Run Code Online (Sandbox Code Playgroud)
重要的是,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.
Run Code Online (Sandbox Code Playgroud)
附言。
我也有过这样的经历。我认为你需要更多地了解 RxJava2 才能在任何地方正确使用。
Promise 可以分为 Single、Flowable、Observable、Completable。如上所述。这是开始理解 RxJava2 的关键。
| 归档时间: |
|
| 查看次数: |
457 次 |
| 最近记录: |