Scala 将wait.result转换为for/yield
我正在寻找一种方法,将以下内容转换为非阻塞呼叫:Scala 将wait.result转换为for/yield,scala,Scala,我正在寻找一种方法,将以下内容转换为非阻塞呼叫: val (greeting, name) = if (someCondition) { ("Welcome", Option("")) } else { var name = Await.result(userClient.getName(arg), Duration.Inf)) ("Hi", name) } 我正在考虑按照以下思路做一些事情: val (greet
val (greeting, name) =
if (someCondition) {
("Welcome", Option(""))
} else {
var name = Await.result(userClient.getName(arg), Duration.Inf))
("Hi", name)
}
我正在考虑按照以下思路做一些事情:
val (greeting, name) =
if (someCondition) {
("Welcome", Option(""))
} else {
for {
name <- userClient.getName(arg)
}
yield {
("Hi", name)
}
}
val(问候语,姓名)=
如果(某些条件){
(“欢迎”,选项(“”)
}否则{
为了{
name你能做的就是
val (greeting, name): (String, Future[Option[String]]) = if (someCondition) {
("Welcome", Future.successful(Some("")))
} else {
("Hi", userClient.getName(arg))
}
如果不等待Future
,Option[String]]
的话,就不能将Future[Option[String]]
转换为Option[Future[String]
;而Future[Option[String]
则事先知道它是一些还是无
在这种情况下,没有必要用来理解。你的第一个例子是如何不阻塞的?等待不算阻塞吗?为了不阻塞,你必须返回未来的@Alec,我认为这个问题的措辞有点误导性。OP表示第一个调用是阻塞的,他们试图让我t non blocking.@jrook当然可以,但我的评论的第二部分确实是关键:如果他们希望它是非阻塞的,它必须返回一个Future
。@Alec jrook是正确的。我对措辞做了一点更改。希望这能消除混淆