gpt4 book ai didi

scala - 使用 future 在Scala中进行错误处理

转载 作者:行者123 更新时间:2023-12-03 07:40:54 25 4
gpt4 key购买 nike

以下方法使用future发送电子邮件,然后捕获mail.send可能引发的任何异常:

sendEmail(from: String, recipients: Seq[String],
subject: String, body: (Option[Txt], Option[Html])) = Try {

import com.typesafe.plugin._
import scala.concurrent.future
import play.api.libs.concurrent.Execution.Implicits.defaultContext

val mail = use[MailerPlugin].email

mail.addFrom(from)
recipients.map(mail.addRecipient(_))
subject.map(mail.setSubject(subject)

future {
try {
mail.send(body._1.map(_.body).getOrElse(""), body._2.map(_.body).getOrElse(""))
} catch {
case NonFatal(e) => Logger.warn("[%s] error sending email".format(ClassName, subject), e)
}
}
}

上面的方法返回 SuccessFailure-例如,如果发件人电子邮件无效,则 mail.addFrom可能会引发异常。话虽如此,我处理在 future块中引发的异常的方式是否正确?

最佳答案

您不需要try中的future

val f = future {
mail.send(body._1.map(_.body).getOrElse(""), body._2.map(_.body).getOrElse(""))
}

f.onFailure{
case NonFatal(e) => Logger.warn("[%s] error sending email".format(ClassName, subject), e)
}
Future可能在 Try 容器中包含成功结果或失败。您可以使用 Try方法获取 onComplete,或使用 Failure方法将 Success 转换为 recover

关于scala - 使用 future 在Scala中进行错误处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20811809/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com