首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何将异步承诺代码转换为rxjava

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

Stack Overflow用户
提问于 2018-09-19 00:16:27
回答 1查看 893关注 0票数 8

我想在RXJava中将以下同步代码建模为异步代码。

代码语言:javascript
运行
复制
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很弱)

代码语言:javascript
运行
复制
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中做同样的模型。任何帮助都是非常感谢的。

EN

回答 1

Stack Overflow用户

发布于 2018-09-21 02:43:44

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

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

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

  1. 您想知道如何实现异步的递归。
  2. 句柄列表或空。

如果您想要处理某些东西或null,可以使用。在RxJava2中

代码语言:javascript
运行
复制
class Action {
  Maybe<List<Action>> handle() {}
}

这就是Action类的句柄返回的内容。

代码语言:javascript
运行
复制
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.订阅将执行此异步。

::每个类都可以很容易地转换.

::解决一个问题的方法太多了。因此,这只是参考。

代码语言:javascript
运行
复制
ex) Single<List<Foo>> <=> Flowable<Foo> // This is not same. but treat as similar.

PS。

我也有过这种经历。我认为您需要了解更多关于RxJava2的知识,以便在任何地方正确使用。

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52396219

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档