【发布时间】:2016-04-18 17:45:12
【问题描述】:
我有一个 Play 2.4(基于 Java)的应用程序,其中一些后台 Akka 任务实现为返回 Promise 的函数。
- Task1 通过银行 Rest API 下载银行对账单。
- Task2 处理报表并将它们与客户配对。
- Task3 执行一些其他处理。
Task2 在 Task1 完成其工作之前无法运行。 Task3 不能在 Task2 之前运行。我试图通过Promise.map() 序列来运行它们,如下所示:
protected F.Promise run() throws WebServiceException {
return bankAPI.downloadBankStatements().map(
result -> bankProc.processBankStatements().map(
_result -> accounting.checkCustomersBalance()));
}
我的印象是,第一张地图会等到 Task1 完成,然后它会调用 Task2,依此类推。当我查看应用程序(任务正在将一些调试信息写入日志)时,我可以看到,这些任务是并行运行的。
我也尝试使用Promise.flatMap() 和Promise.sequence(),但没有成功。任务始终并行运行。
我知道 Play 本质上是非阻塞应用程序,但在这种情况下,我真的需要按正确的顺序做事。
关于如何按选定的顺序运行多个 Promise 有什么通用的做法吗?
【问题讨论】: