我想在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中做同样的模型。任何帮助都是非常感谢的。
发布于 2018-09-21 02:43:44
首先,对不起我的英语不好。
,我编辑了整个答案,因为我没有理解他的问题是什么。
我不知道您的Action类的handle函数是如何实现的,但是这个函数的返回值应该更改为RxJava2 2的异步类。在这种情况下,也许是上课。
如果您想要处理某些东西或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.单=>返回单个类。
2.可流动的、可观察的=>返回多个类。(流动比可观察到的复杂,后者增加了背压。)
3.可完成的=>不返回任何内容,只是成功与否。
4.可能是返回*或null。
5.订阅将执行此异步。
::每个类都可以很容易地转换.
::解决一个问题的方法太多了。因此,这只是参考。
ex) Single<List<Foo>> <=> Flowable<Foo> // This is not same. but treat as similar.PS。
我也有过这种经历。我认为您需要了解更多关于RxJava2的知识,以便在任何地方正确使用。
承诺可以分为单一的、流动的、可观察的、可完成的。如上文所述。这是开始理解RxJava2.的关键。
https://stackoverflow.com/questions/52396219
复制相似问题