gpt4 book ai didi

scala - 执行 play Future 查询时,scala 变量的值不会改变。为什么?

转载 作者:行者123 更新时间:2023-12-01 12:27:20 24 4
gpt4 key购买 nike

我是 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"))

关于scala - 执行 play Future 查询时,scala 变量的值不会改变。为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37991310/

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