我是SCALA语言的新手,并且通过播放和光滑制作API服务。请查看以下代码。
def checkToken(userToken: String): Boolean = {
var status = false
Tokens.getToken(userToken).map(
token => {
if (token.isDefined && token.get.status.equals("ACTIVE")) {
status = true
println("--------------------------------- if: "+status+" -----------------------------")
} else {
status = false
println("--------------------------------- else: "+status+" -----------------------------")
}
}
)
println("---------------------------------status: "+status+"-----------------------------")
return status
}
执行上述代码时,它显示以下输出
---------------------------------status: false-----------------------------
--------------------------------- if: true -----------------------------
但是输出应该是[对于有效的令牌都应该是真的]
---------------------------------status: true-----------------------------
--------------------------------- if: true -----------------------------
上述代码有什么问题?
答案 0 :(得分:4)
你有时间问题。
如果getToken
返回Future
,当您的“主”线程到达Tokens.getToken(userToken)
时,它将在另一个线程上执行它。与此同时,主线程继续移动,在实际有时间更改之前到达print("status"+status)
,函数返回。只有这样Future
才会在某个时刻返回,并且仍然在该单独的线程上执行map
内的代码并更改status
的值。
我认为你想要的是一个返回Future[Boolean]
的函数(编辑为匹配@rethab建议):
def checkToken(userToken: String): Future[Boolean] = Tokens.getToken(userToken).map(_.contains("ACTIVE"))