相关疑难解决方法(0)

当任何承诺已经实现时,是否有可能脱离 await Promise.all (Chrome 80)

我需要向多服务器发送请求,以查看哪个服务器将响应我的请求,如果其中任何一个响应,我将进一步与该服务器交互。最简单的方法是按顺序发送我的请求,像这样

async function probing(servers) {
    for (const server of servers) {
        const result = await fetch(server)
        if (result.status == 200) {
            return result
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

但我希望加快探测过程,所以我将代码更改为

async function probing(servers) {
    results = await Promise.all(
        servers.map(async server => {
            return await fetch(server)
        })
    )
    for (const result of results) {
        if (result.status == 200) return result
    }
}
Run Code Online (Sandbox Code Playgroud)

但我仍然需要等待所有的承诺完成。我真正需要的是,如果其中一个有决心,我就从我的探测中返回()

那有可能吗?

- - 更新 - -

感谢评论promise.any是解决方案(单线箭头函数可以进一步简化如下)

result = await Promise.any(
    servers.map(server => fetch(server))
)
Run Code Online (Sandbox Code Playgroud)

---- 更新 …

javascript google-chrome promise async-await polyfills

7
推荐指数
1
解决办法
191
查看次数