【发布时间】:2019-03-12 06:34:07
【问题描述】:
我正在制作一个不和谐机器人作为构建在 project-reactor 之上的个人项目?
我需要调用一个函数,该函数需要获取一个在链上进一步传递的变量。
从下面的代码中,我需要传入两个参数。第一个需要来自 MessageCreateEvent 事件的参数,第二个需要来自 getContent 的参数。
我怎么能这样做,我是使用反应器的新手。
discordClient.getEventDispatcher().on(MessageCreateEvent.class)
.map(MessageCreateEvent::getMessage)
.map(Message::getContent)
.filter(Optional::isPresent)
.map(o -> o.get())
.map(this::getCommand)
.filter(Objects::nonNull)
.map(msg -> msg.runCommand(null, null))
.subscribe();
我也试过这个,但我没有看到 runCommand() 被调用。:
discordClient.getEventDispatcher().on(MessageCreateEvent.class)
.flatMap(event ->
Mono.just(event)
.map(MessageCreateEvent::getMessage)
.map(Message::getContent)
.filter(Optional::isPresent)
.map(o -> o.get())
.map(this::getCommand)
.filter(Objects::nonNull)
.map(msg -> msg.runCommand(event, null))
)
.subscribe();
【问题讨论】:
-
你不能。您需要使用带有
flatMap的嵌套通量或传递元组。我个人更喜欢前一种解决方案。 -
你是如何制作它们的?我以为它只是在事件之后添加一个flatMap,然后添加一个(事件-> on() 之后的其余代码),但是没有调用runCommand。
-
你没有
doOnError,也没有doOnNext。你只需调用subscribe()并将结果放在地板上 - 你怎么知道什么叫什么不叫? -
我想到了两种可能性:您在 test/main 中执行此操作,并且线程在序列有机会运行(异步)之前退出,或者消息被过滤掉(无内容/空命令)。如下所示,您可以使用
log()更好地了解在哪个步骤会发生什么。
标签: java project-reactor reactor