【发布时间】:2020-07-09 21:14:00
【问题描述】:
我在 Scala 上有一个电报机器人,如果它存在,我想将图像发送给用户,如果不存在,我想发送消息“对不起,图像不存在”。我有一个函数getImage(tag),它返回Future.successful(link) 或Future.failed(NoImageException(msg))。
onCommand("/img") { implicit msg =>
val tag = msg.text.get.drop("/img ".length)
try {
if (tag.isEmpty) throw new IndexOutOfBoundsException()
service.getImage(tag).transform {
case Success(link) => Success(
try {
replyWithPhoto(InputFile(link))
} catch {
case _ => reply(link) // maybe it isn't a photo...
})
case Failure(e) => Success(reply(e.getMessage))
}.void
} catch {
case _: IndexOutOfBoundsException => reply("Empty argument list. Usage: /img tag").void
}}
如果成功则此代码发送图像,但如果失败则不发送消息(但在这种情况下它肯定选择case Failure(e))
【问题讨论】:
-
我认为你需要使用 onComplete 而不是 transform
-
@VladislavKievski 但在这种情况下它会返回 Unit 而不是 Future[Unit] 我不知道如何用惯用方式重写它:(
-
@RonaldSMerritt
reply函数返回什么?
标签: scala exception bots future