首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Mobius:在EffectHandler上,Transformers、Consumer、Action和Functions之间有什么区别?

Mobius:在EffectHandler上,Transformers、Consumer、Action和Functions之间有什么区别?
EN

Stack Overflow用户
提问于 2019-01-14 22:43:06
回答 2查看 135关注 0票数 2

在EffectHandler上,Transformers、使用者、操作和功能之间有什么区别?我看到这4种类型是受支持的in the docs

代码语言:javascript
复制
ObservableTransformer<Effect, Event> rxEffectHandler =
    RxMobius.<Effect, Event>subtypeEffectHandler()
        // Effect Handlers can be an ObservableTransformer
        .addTransformer(Effect.SearchRequest.class, this::handleSearchRequest)
        // They can also be a Consumer<F> (eg. Consumer<ShowErrorMessage>)
        .addConsumer(Effect.ShowErrorMessage.class, view::showErrorMessage, AndroidSchedulers.mainThread())
        // Or an Action
        .addAction(Effect.SomethingElse.class, this::handleSomethingElse)
        // Or a Function<F, E> (eg. Function<SaveToDb, Event>)
        .addFunction(Effect.SaveToDb.class, this::handleSavingToDb)
        .build();

使用哪一个?也许我遗漏了一些我需要先阅读的RxBackground?

EN

回答 2

Stack Overflow用户

发布于 2019-01-14 22:44:28

每个F -> ()的类型签名都给了你一个提示,但粗略的总结是:-消费者effect :获取effect对象作为参数,并调用一些东西作为effect。示例:Toast.makeText(context, effect.message(), duration).show();

  • 操作() -> ():与消费者相同,但您不需要来自effect对象的任何内容。示例:context.startActivity(new Intent(MyActivity.class))
  • Function F -> E:阻止从效果到新事件的转换。如果您知道只会发出一个事件,并且可以安全地将其作为阻塞调用来执行,则可以使用。示例:return Event.lookupResult(repository.get(effect.key()))
  • Transformer Observable<F> -> Observable<E>:最强大的应用程序接口,一个完整的rx,可以做任何事情来将效果流转换为事件流,包括每个效果发出多个事件,甚至在没有首先收到效果的情况下发出事件。示例:effects.flatMap(effect -> return loadData(effect.uri())).map(Event::dataLoaded) (已编辑)
票数 2
EN

Stack Overflow用户

发布于 2019-04-12 03:41:17

下面是它们的工作原理,

代码语言:javascript
复制
╔═════════════╤═══════════════════════════╤═════════════════════╗
║     Type    │  Receives effect object?  │ Can produce events? ║
╠═════════════╪═══════════════════════════╪═════════════════════╣
║ Action      │            No             │         No          ║
║ Consumer    │            Yes            │         No          ║
║ Transformer │            Yes            │         Yes         ║
╚═════════════╧═══════════════════════════╧═════════════════════╝
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54183630

复制
相关文章

相似问题

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