如何在反应堆中获取先前传递的变量?
How to get a previously passed variable in reactor?
我正在将 discord 机器人作为个人项目构建在 project-reactor 之上?
我需要调用一个函数,该函数需要获取一个进一步传递到链中的变量。
从下面的代码中,我需要传入两个参数。第一个需要来自 MessageCreateEvent 事件的参数,第二个需要来自 getContent 的参数。
我该怎么做,我是 reactor 的新手。
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 很好。错误可能出在您预期之外的其他地方。这可能会帮助您弄清楚发生了什么(假设您有一个名为 "log" 的记录器对象):
Mono.just(event)
.doOnNext(log::info)
.map(MessageCreateEvent::getMessage)
.doOnNext(log::info)
流的每一行依此类推。您可能想在最后一行添加:
.doOnEach(s -> log.info("signal: " + s)))
仅供参考,或者对于偶然发现此问题的其他人,从技术上讲,是一种使用在链上传递的东西的方法,zipWhen():
discordClient
.getEventDispatcher()
.on(MessageCreateEvent.class)
.zipWhen(
event ->
Mono.just(event)
.map(MessageCreateEvent::getMessage)
.map(Message::getContent)
.filter(Optional::isPresent)
.map(o -> o.get())
.map(this::getCommand)
.filter(Objects::nonNull),
(event, msg) -> msg.runCommand(event, null))
.subscribe();
但这并不能使您的代码更清晰!但对于某些其他情况,它可能很方便。
我正在将 discord 机器人作为个人项目构建在 project-reactor 之上?
我需要调用一个函数,该函数需要获取一个进一步传递到链中的变量。
从下面的代码中,我需要传入两个参数。第一个需要来自 MessageCreateEvent 事件的参数,第二个需要来自 getContent 的参数。
我该怎么做,我是 reactor 的新手。
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 很好。错误可能出在您预期之外的其他地方。这可能会帮助您弄清楚发生了什么(假设您有一个名为 "log" 的记录器对象):
Mono.just(event)
.doOnNext(log::info)
.map(MessageCreateEvent::getMessage)
.doOnNext(log::info)
流的每一行依此类推。您可能想在最后一行添加:
.doOnEach(s -> log.info("signal: " + s)))
仅供参考,或者对于偶然发现此问题的其他人,从技术上讲,是一种使用在链上传递的东西的方法,zipWhen():
discordClient
.getEventDispatcher()
.on(MessageCreateEvent.class)
.zipWhen(
event ->
Mono.just(event)
.map(MessageCreateEvent::getMessage)
.map(Message::getContent)
.filter(Optional::isPresent)
.map(o -> o.get())
.map(this::getCommand)
.filter(Objects::nonNull),
(event, msg) -> msg.runCommand(event, null))
.subscribe();
但这并不能使您的代码更清晰!但对于某些其他情况,它可能很方便。