Java的CompletableFuture-发送多个请求,等待第一个有效响应

时间:2019-04-28 16:34:19

标签: java asynchronous completable-future

请考虑以下情形:

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...
}

0 个答案:

没有答案