- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我有以下同步代码,我想在 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 中建立相同的模型。任何帮助表示赞赏。
最佳答案
首先,抱歉我的英语不好。
我编辑了整个答案,因为我没听清他的问题是什么。
我不知道你的 Action 类的句柄函数是如何实现的,但是这个函数的返回值应该改为 RxJava2 的异步类。在这种情况下,Maybe 类。
- You wants how to implements recursion of async.
- Handle List or null.
如果你想处理某些东西或 null,请使用 Maybe。在 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() 函数正确返回。
Additional
在 RxJava2 中,有多个类来处理异步。单一的,可流动的,可观察的,可完成的。以及每个类的实例方法,订阅。
简单的说,
1.Single => 返回单个类。
2.Flowable, Observable => 返回多个类。 (Flowable 比 Observable 更复杂,增加了背压。)
3.Completable => 什么都不返回,只返回成功与否。
4.Maybe is 返回 * 或 null。
5.subscribe 是异步执行的。
::每个类都可以轻松转换。
::解决一个问题的方法有很多种。所以它只是引用。
ex) Single<List<Foo>> <=> Flowable<Foo> // This is not same. but treat as similar.
PS.
我也有过这样的经历。我认为您需要了解更多有关 RxJava2 的知识才能在任何地方正确使用。
Promise可以分为Single, Flowable, Observable, Completable。如上所述。这是开始理解 RxJava2 的关键。
关于java - 如何将异步 promise 代码转换为 rxjava,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52396219/
我是一名优秀的程序员,十分优秀!