当前位置: 首页 > 面试题库 >

如何将基于回调的API转换为基于Observable的API?

易宣
2023-03-14
问题内容

我正在使用的库Message使用回调对象发出一系列对象。

interface MessageCallback {
    onMessage(Message message);
}

使用某些libraryObject.setCallback(MessageCallback)调用添加回调,并使用非阻塞libraryObject.start()方法调用启动该过程。

创建Observable<Message>将发射这些对象的的最佳方法是什么?

如果libraryObject.start()阻止了该怎么办?


问题答案:

我认为您需要这样的东西(scala中给出的示例)

import rx.lang.scala.{Observable, Subscriber}

case class Message(message: String)

trait MessageCallback {
  def onMessage(message: Message)
}

object LibraryObject {
  def setCallback(callback: MessageCallback): Unit = {
    ???
  }

  def removeCallback(callback: MessageCallback): Unit = {
    ???
  }

  def start(): Unit = {
    ???
  }
}

def messagesSource: Observable[Message] =
  Observable((subscriber: Subscriber[Message]) ⇒ {
    val callback = new MessageCallback {
      def onMessage(message: Message) {
        subscriber.onNext(message)
      }
    }
    LibraryObject.setCallback(callback)
    subscriber.add {
      LibraryObject.removeCallback(callback)
    }
  })

至于阻塞/非阻塞start():通常,基于回调的体系结构将回调订阅与进程启动分开。在这种情况下,您可以messageSource完全独立start()于进程的时间创建任意数量的。另外,是否分叉的决定完全取决于您。您的体系结构与此不同吗?

您还应该以某种方式完成该过程。最好是将onCompleted处理程序添加到MessageCallback接口。如果要处理错误,请添加onError处理程序。现在,您刚刚宣布了RxJava的基本构建基石,一个观察员 :-)



 类似资料:
  • 问题内容: 我尝试不使用任何xml。 像这样一个:转换为@Bean 问题在这里。 尝试将“ com.cloudlb.domain.User”转换为Class []无效。 错误:投放问题。 先感谢您。 问题答案:

  • 问题内容: wifiservice.js: 我的整个控制器: 我想做的是调用$ scope.getList(),它返回周围wifi SSID的列表,然后在$ scope.checkin()中,我要处理这些数据。 由于扫描需要一些时间,因此我必须等待getList函数完成,这就是为什么我尝试使用.then的原因,但这给了我标题上的错误提示。有任何想法吗? 问题答案: 好吧,我想出了一些不同的东西:

  • 问题内容: 我想使用Promise,但是我有一个类似以下格式的回调API: 1. DOM加载或其他一次事件: 2.普通回调: 3.节点样式回调(“ nodeback”): 4.带有节点样式回调的整个库: 如何在promise中使用API​​,如何“承诺”它? 问题答案: 承诺有状态,它们从待定状态开始,可以解决: 完成 意味着计算成功完成。 拒绝 表示计算失败。 承诺返回函数 绝不应该抛出,而应该

  • 问题内容: 我想使用Promise,但是我有一个类似以下格式的回调API: 1. DOM加载或其他一次事件: 2.普通回调: 3.节点样式回调(“ nodeback”): 4.带有节点样式回调的整个库: 如何在Promise中使用API​​,如何“承诺”呢? 问题答案: 承诺具有状态,它们从待定状态开始,可以解决: fulfilled成 意味着计算成功完成。 fulfilled 表示计算失败。 承

  • 如何将基于java的注释spring mvc maven项目转换为spring Boot?我没有xml文件,而是使用了webconfig类和webinitializer类。我知道如何将基于xml的项目转换为spring Boot。你可能会想有什么区别?对我来说,不同之处在于我说过我使用了webconfig类和webinitializer,我的spring mvc maven项目没有main类。我应

  • 下面的代码来自一个名为ButterKnife的Android库。我正在弄清楚它是怎么工作的。 我试图重新创建此函数的行为: 和用法: 但是异常并非永远不会被捕获,而是在调用方法时在行中抛出。为什么? 还有,这到底是如何工作的?该方法如何知道要转换到什么?