You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何我的Scala+SQLite代码无法返回查询结果?

问题原因与解决方案

问题根源

你的代码里,db.run(screenings.result)返回的是异步Future,onComplete是异步回调逻辑。但主线程执行完println("Screenings")后就直接退出了,根本没等Future的回调代码执行——这就是为什么你看不到"completed"输出的原因。前面的setupFuture用了Await.result阻塞等待执行完成,但后面的查询操作没有做任何等待,进程直接结束。

解决方法

有两种简单的方式让主线程等待异步查询完成:

方式一:用Await.result阻塞获取结果

把异步查询改成阻塞等待,和初始化操作一样:

println("Screenings")

val resultFuture = db.run(screenings.result)
try {
    val results = Await.result(resultFuture, 20.second)
    println("completed")
    results.foreach(println)
} catch {
    case e: Exception => println(s"An error has occurred: ${e.getMessage}")
}

方式二:用Await.ready等待Future执行完成

如果不想获取结果,只是等待回调执行,可以用Await.ready:

println("Screenings")

val resultFuture = db.run(screenings.result).onComplete {
    case Success(results) =>  
        println("completed")
        results.foreach(println)
    case Failure(exception) => println(s"An error has occurred: ${exception.getMessage}")
}
// 等待Future执行完成,最长等20秒
Await.ready(resultFuture, 20.second)

额外说明

在实际的后端服务(比如Play、Akka应用)中,不需要手动用Await,因为服务本身会保持主线程运行。但在这种控制台测试程序里,必须显式等待异步任务完成,否则进程会提前终止。

内容的提问来源于stack exchange,提问作者Ni3dzwi3dz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 07:20:34