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