请考虑以下情形:
Java应用程序正在与单个浏览器的多个选项卡进行通信。它能够将JS请求发送到每个选项卡,并因此返回CompletableFuture<String>
。收到对已发送请求的响应后,相关的CompletableFuture
已成功完成,并带有脚本结果。如果目标选项卡在后台,则它可能会以'hidden'
响应,根本不响应请求,甚至出现错误(这将导致CompletableFuture
异常完成)。>
现在,我需要确定当前可用和可见的选项卡(假设在任何给定时间只有一个这样的选项卡)。可以通过向每个选项卡发送document.visibilityState
,检查脚本的结果并找到返回'visible'
的脚本来完成,而不是失败,拖延或返回'hidden'
。 >
如何等待第一个返回'visible'
的标签?
我想做以下事情:
interface BrowserTab {
CompletableFuture<String> evaluate(String request);
}
BrowserTab getVisibleTab(Set<BrowserTab> tabs) {
return tabs.stream()
.map(t -> t.evaluate("document.visibilityState"))
// I guess I should use CompletableFuture::anyOf, or CompletableFuture::then*,
// but I don't relly know how...
}