scala之执行 play Future 查询时,scala 变量的值不会改变。为什么
exmyth
阅读:14
2025-01-19 22:14:33
评论:0
我是 SCALA 语言的新手,正在使用 play 和 slick 制作 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 -----------------------------
但输出应该是[对于有效 token ,两者都应该为真]
---------------------------------status: true-----------------------------
--------------------------------- if: true -----------------------------
上面的代码有什么问题?
请您参考如下方法:
您遇到了时间问题。
如果 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"))
声明
1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。